Препроцессор С ++ - PullRequest
       24

Препроцессор С ++

11 голосов
/ 18 октября 2010

Я бы переписал простую программу на C ++, используя unix в качестве имени переменной.Но компиляция программы не удалась.

#include <iostream>
int main() {
        int unix = 1;
        return 0;
}

После большого поиска в Интернете я попал на этот сайт, который мне помог, сказав, что unix - это предопределенный макрос, равный 1.

* 1008.* Я хочу знать список всех таких предопределенных макросов.

Ответы [ 4 ]

23 голосов
/ 18 октября 2010

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

cpp -dM file.cpp

Также обратите внимание, что такие макросы, как unix, linux не являются стандартными, и вы можете отключить их, используя флаг компиляции -ansi как:

g++ -ansi file.cpp

И вы можете использовать флаг -ansi с cpp также, чтобы получить список всех стандартных предопределенных макросов:

cpp -dM -ansi file.cpp
4 голосов
/ 18 октября 2010

touch mysymdef.h;g ++ -dM mysymdef.h Он сгенерирует файл mysymdef.h.gch, в котором будут все предопределенные символы / макросы для вашей системы.Файл является двоичным, но с некоторыми изменениями он сработает.

, подробности см.

http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#Invocation

http://gcc.gnu.org/onlinedocs/cpp/System_002dspecific-Predefined-Macros.html

1 голос
/ 21 августа 2015
$ uname 
Linux

$ cpp -dM <<<'' | grep unix
#define __unix__ 1
#define __unix 1
#define unix 1
1 голос
/ 23 октября 2010

Я не думаю, что есть такой список, как вы просите, который доступен для каждой потенциальной платформы.Возможно, вы захотите увидеть Предопределенные макросы для получения дополнительной информации.'Gcc -dM' будет работать в Linux.

...