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

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

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

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

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

Ответ 1

Вы можете перечислить все предопределенные макросы с помощью препроцессора GNU cpp как:

cpp -dM file.cpp

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

g++ -ansi file.cpp

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

cpp -dM -ansi file.cpp

Ответ 2

коснитесь 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

Ответ 3

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

Ответ 4

$ uname 
Linux

$ cpp -dM <<<'' | grep unix
#define __unix__ 1
#define __unix 1
#define unix 1