Am 15.12.23 um 18:09 schrieb Junio C Hamano: > Phillip Wood <phillip.wood123@xxxxxxxxx> writes: > >> Even if it unlikely that we would directly compare a boolean variable >> to "true" or "false" it is certainly conceivable that we'd compare two >> boolean variables directly. For the integer fallback to be safe we'd >> need to write >> >> if (!cond_a == !cond_b) >> >> rather than >> >> if (cond_a == cond_b) > > Eek, it defeats the benefit of using true Boolean type if we had to > train ourselves to write the former, doesn't it? Indeed. >> [1] 7bc341e21b (git-compat-util: add a test balloon for C99 support, >> 2021-12-01) > > Nice to be reminded of this one. > > The cited commit does not start to use any specific feature from > C99, other than that we now require that the compiler claims C99 > conformance by __STDC_VERSION__ set appropriately. The commit log > message says C99 "provides a variety of useful features, including > ..., many of which we already use.", which implies that our wish was > to officially allow any and all features in C99 to be used in our > codebase after a successful flight of this test balloon. > > Now, I think we saw a successful flight of this test balloon by now. > Is allowing all the C99 the next step we really want to take? > > I still personally have an aversion against decl-after-statement and > //-comments, not due to portability reasons at all, but because I > find that the code is easier to read without it. But in principle, > it is powerful to be able to say "OK, as long as the feature is in > C99 you can use it", instead of having to decide on individual > features, and I am not fundamentally against going that route if it > is where people want to go. C99 added a lot of features, but we already use several of them. Support for individual features may vary, though -- who knows? E.g. http://www.compilers.de/vbcc.html claims to support "most of ISO/IEC 9899:1999 (C99)", yet _Bool is not mentioned in its docs (but __STDC_VERSION__ 199901L is). It's not a particularly interesting compiler for us, but still a real-world example of selective C99 support. The table at the bottom of https://en.cppreference.com/w/c/99 would be useful if it was filled out for more compilers. And it also doesn't mention _Bool and stdbool.h. TenDRA and the M/o/Vfuscator are the only compilers without stdbool.h support on https://godbolt.org/ as far as I can see, but that website doesn't have a lot of commercial compilers (understandably). So I guess in practice we still need to check each new feature, even though in theory we should be fine after the two-year test. René