Reputation: 2191
The question title should say it all, but here's an example of what sort of thing I'm looking for:
#ifndef THE_IDENTIFIER_THAT_WOULD_INDICATE_BEING_COMPILED_AS_CPLUSPLUS
/*
* Example of something that would matter.
*/
typedef enum _bool bool;
enum _bool { false, true };
#endif
What is the identifier? It's bugging me severely, as I know I've seen code that does this before.
I'm using GCC, by the way.
(I'm surprised I couldn't find a duplicate somewhere on SO. If someone else can find one, feel free to redirect me and close this as a dupe.)
Upvotes: 14
Views: 6305
Reputation: 108988
The identifier is __cplusplus
#ifdef __cplusplus
#error NO C++ PLEASE
#endif
C23 6.10.10.1p3
The implementation shall not predefine the macro
__cplusplus
, nor shall it define it in any standard header."
C++11 16.8.1
The following macro names shall be defined by the implementation:
__cplusplus
: The name__cplusplus
is defined to the value201103L
when compiling a C++ translation unit.
Upvotes: 8
Reputation: 5171
The identifier you are looking for is __cplusplus
, which can be used like this:
#ifdef __cplusplus
// Code being compiled as C++.
#endif
Upvotes: 1
Reputation: 9278
#ifdef __cplusplus
I think the file extension matters too, if the C++ compiler is given a .c file it will compile it as C code. i have nothing to back this up though.
Upvotes: 2
Reputation: 490623
#ifdef __cplusplus
with a few really ancient compilers (early versions of cfront and a couple of ports) it was c_pluplus
, IIRC.
Upvotes: 3