Как проверить (через препроцессор), компилируется ли исходный файл C как код C ++ - PullRequest
3 голосов
/ 11 ноября 2010

В названии вопроса должно быть сказано все, но вот пример того, что я ищу:

#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

Что такое идентификатор? Это сильно беспокоит меня, так как я знаю, что видел код, который делает это раньше.

Кстати, я использую GCC.

(Я удивлен, что не смог найти дубликат где-нибудь на SO. Если кто-то еще может найти его, не стесняйтесь перенаправить меня и закрыть это как обман.)

Ответы [ 6 ]

10 голосов
/ 11 ноября 2010
#ifndef __cplusplus

Если я правильно помню.

4 голосов
/ 11 ноября 2010

Идентификатор __cplusplus

#ifdef __cplusplus
#error NO C++ PLEASE
#endif
2 голосов
/ 11 ноября 2010
#ifdef __cplusplus
2 голосов
/ 11 ноября 2010

#ifdef __cplusplus

с несколькими действительно древними компиляторами (ранние версии cfront и пара портов) это было c_pluplus, IIRC.

1 голос
/ 11 ноября 2010

#ifdef __cplusplus

Я думаю, что расширение файла тоже имеет значение, если компилятору C ++ дается файл .c, он скомпилирует его как код C. у меня нет ничего, чтобы подтвердить это.

1 голос
/ 11 ноября 2010

Идентификатор, который вы ищете - __cplusplus, который можно использовать так:

#ifdef __cplusplus
// Code being compiled as C++.
#endif
...