2012-01-16 2 views
1

Я знаю, что опция -E позволяет обрабатывать выходные данные из исходного файла c. Но я хочу, чтобы макросы были полностью оценены.Как увидеть полностью обработанный предварительно обработанный вывод из gcc

В качестве простейшего примера, в следующем фрагменте,

# define P(n) n, n^1, n^1, n 
const bool array[4] = {P(0)}; 

Я хочу видеть точные значения элементов в массиве [4]. Но вывод -E показывает только 0, 0^1, 0^1, 0 и т. Д. Итак, как сделать это, чтобы показать 0, 1, 1, 0 в полностью оцениваемой форме?

Спасибо.

ответ

3

Я думаю, вы неправильно поняли роль препроцессора. Препроцессор раскрывает макросы. 0, 0^1, 0^1, 0 максимально расширен. Оттуда до следующего этапа компиляции следует интерпретировать числовые выражения. Следующий этап, на котором вы можете увидеть выход для gcc, - это генерация кода сборки, для которого вы можете использовать gcc -S.

1

Это полностью оцененная форма. Препроцессор не выполняет постоянную фальцовку, компилятор делает.

+0

О, я думаю, я спрашивал, как получить постоянную складку в дополнение к предварительной обработке. Есть ли способ сделать это? –

+0

Не на этапе предварительной обработки вы можете перейти к ассемблеру и найти его там. – Kevin

+0

Да, я это видел. Но в идеале я все еще хочу, чтобы он находился в форме назначения массива. Похоже, вывод из '-S' дает мне столбец. –

0

Полученный результат является полностью запрограммированным кодом. Что вы хотите сделать во время компиляции.

Смежные вопросы