@@ -202,10 +202,19 @@ For C programs:
202
202
by e.g. "echo DEVELOPER=1 >>config.mak".
203
203
204
204
- We try to support a wide range of C compilers to compile Git with,
205
- including old ones. You should not use features from newer C
205
+ including old ones. As of Git v2.35.0 Git requires C99 (we check
206
+ "__STDC_VERSION__"). You should not use features from a newer C
206
207
standard, even if your compiler groks them.
207
208
208
- There are a few exceptions to this guideline:
209
+ New C99 features have been phased in gradually, if something's new
210
+ in C99 but not used yet don't assume that it's safe to use, some
211
+ compilers we target have only partial support for it. These are
212
+ considered safe to use:
213
+
214
+ . since around 2007 with 2b6854c863a, we have been using
215
+ initializer elements which are not computable at load time. E.g.:
216
+
217
+ const char *args[] = {"constant", variable, NULL};
209
218
210
219
. since early 2012 with e1327023ea, we have been using an enum
211
220
definition whose last element is followed by a comma. This, like
@@ -221,18 +230,24 @@ For C programs:
221
230
. since early 2021 with 765dc168882, we have been using variadic
222
231
macros, mostly for printf-like trace and debug macros.
223
232
224
- These used to be forbidden, but we have not heard any breakage
225
- report, and they are assumed to be safe.
233
+ . since late 2021 with 44ba10d6, we have had variables declared in
234
+ the for loop "for (int i = 0; i < 10; i++)".
235
+
236
+ New C99 features that we cannot use yet:
237
+
238
+ . %z and %zu as a printf() argument for a size_t (the %z being for
239
+ the POSIX-specific ssize_t). Instead you should use
240
+ printf("%"PRIuMAX, (uintmax_t)v). These days the MSVC version we
241
+ rely on supports %z, but the C library used by MinGW does not.
242
+
243
+ . Shorthand like ".a.b = *c" in struct initializations is known to
244
+ trip up an older IBM XLC version, use ".a = { .b = *c }" instead.
245
+ See the 33665d98 (reftable: make assignments portable to AIX xlc
246
+ v12.01, 2022-03-28).
226
247
227
248
- Variables have to be declared at the beginning of the block, before
228
249
the first statement (i.e. -Wdeclaration-after-statement).
229
250
230
- - Declaring a variable in the for loop "for (int i = 0; i < 10; i++)"
231
- is still not allowed in this codebase. We are in the process of
232
- allowing it by waiting to see that 44ba10d6 (revision: use C99
233
- declaration of variable in for() loop, 2021-11-14) does not get
234
- complaints. Let's revisit this around November 2022.
235
-
236
251
- NULL pointers shall be written as NULL, not as 0.
237
252
238
253
- When declaring pointers, the star sides with the variable
0 commit comments