Вопрос по gcc – В любом случае, чтобы увидеть список макросов, определенных препроцессором?

10

Я хотел бы видеть все макросы, которые определены вызовом компилятора, который я использую. Есть какой-либо способ сделать это? Я видел в руководстве это говорит, что вы можете использоватьcpp -dM  но это не работает для меня. Возможно, я делаю что-то не так?

Когда я бегу:

cpp -dM

Я вообще не получаю вывод от препроцессора. Если я попытаюсь добавить-dM в качестве опции для gcc я не замечаю никакой разницы.

«У меня не работает» - пожалуйста, будьте более информативным! Oliver Charlesworth
Роб, спасибо, мне придется попытаться выяснить, как это сделать из окон, к сожалению, я застрял, используя. Я использую кросс-компилятор исходного кода для arm. (Порт gcc по существу) Brandon Yates
На моем компьютере с Linux выводcpp -dM < /dev/null | wc -l является124Таким образом, есть 124 предопределенных значения.cpp -dM < /dev/null | less показывает мне, что они есть. Каковы результаты этих команд на вашем компьютере? Robᵩ
Извините я попытался прояснить это немного Brandon Yates

Ваш Ответ

2   ответа
5

По умолчанию,cpp -dM будет читать свой входной файл из стандартного ввода и записывать в стандартный вывод. Поскольку вы не пытаетесь предварительно обработать какой-либо ввод, вы можете передать ему пустой ввод, используя/dev/null:

# Option 1
cpp -dM < /dev/null
# Optio n2
cpp -dM /dev/null

В Windows вы можете использоватьNUL псевдофайл вместо/dev/null.

12

Ты можешь использовать:

gcc -dM -E - < /dev/null

Обратите внимание, что вы также можете получить макросы компилятора в дополнение к этой команде:

touch bla.c && gcc -dM -E bla.c

Например на моем компьютере:

$ touch bla.c && gcc -dM -E bla.c | wc -l
486
$ gcc -dM -E - < /dev/null | wc -l
124
$
@Christoph хорошо, так что это было исправлено, потому что это не на моем gcc-4.4.3 / Linux
также полезны-xc, -xc++ а также-std=... так что вы можете сравнить определения языка и диалекта
@ Кристоф на самом деле я попробовал первымgcc -xc -dM -E - < /dev/null для моего второго примера, но это не похоже на работу с-dM (тот же результат, что и в первом примере)
здесь работает как положено (gcc-4.5.3 / MinGW-w64)

Похожие вопросы