Date: Tue, 1 Aug 2017 09:24:07 +0200 From: Jens Gustedt <jens.gustedt@...ia.fr> Cc: musl@...ts.openwall.com Subject: Re: stdbool.h does not define _Bool when included by C++ code Hello, On Mon, 31 Jul 2017 21:31:22 -0400 Rich Felker <dalias@...c.org> wrote: > On Tue, Aug 01, 2017 at 09:06:01AM +1200, Michael Clark wrote: > > > > > On 31 Jul 2017, at 9:46 PM, Jens Gustedt <jens.gustedt@...ia.fr> > > > wrote: > > > > > > Hello, > > > > > > On Mon, 31 Jul 2017 11:18:28 +0200 Szabolcs Nagy <nsz@...t70.net> > > > wrote: > [...] > > > > > > Basically stdbool.h is already a header to accomodate C++ usage of > > > bool, false and true to C. I makes not much sense to include this > > > in C++ code. > > > > It’s useful exactly for the case where you have C code in your C++, > > which is why I suspect GCC has the condition in its version of > > stdbool.h > > > > > I think that applications that want to be shure that their code > > > compiles for both should use "bool" and should do > > > > > > #ifndef __cplusplus > > > # include <stdbool.h> > > > #endif > > > > I think you’re missing the point. C code can use _Bool and this can > > be put through the C++ front-end. Compiler explorer does this by > > default, and the GCC and glibc headers already have the fix, which > > is #define _Bool bool (in the patch) for the case where C code is > > fed in to the C++ front end. > > Compiling C code with a C++ compiler is utterly wrong, and will fail > in more subtle ways; erroring out early seems much more desirable. C > is not a subset of C++, and even the syntax that's in the intersection > of both languages is semantically different between them. I agree, and I should have been more precise for the use case where this actually makes sense. The only compatibility between C an C++ that is ensured is ABI compatibility. And here what I said above is a reasonable way to write *header* files that can be included by both languages. So such a header is *not* simply "C code that is compiled as C++". There are several syntax problems for such headers, simple ones as _Bool, but also _Noreturn, _Static_assert, and more difficult ones as _Atomic or enumeration types ... Such a header has to be carefully designed to fit to both languages. Placing __cplusplus ifdef's into some of the headers could be a strategy to ease the pain. Defining _Bool and stuff in some way for C++ would just be pushing things under the carpet and hide difficulties that reduce awareness of the problem. Jens -- :: INRIA Nancy Grand Est ::: Camus ::::::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt :: Content of type "application/pgp-signature" skipped
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.