gcc -E file.c
будет предобработки file.c
и написать препроцессированный исходный код на стандартный вывод (консоль). Таким образом, чтобы сохранить препроцессированный выход, перенаправлять стандартный вывод в файл по вашему выбору:
gcc -E file.c > somefile
Это плохая идея для неких-файла, чтобы иметь .o
расширения. GCC и другие инструменты интерпретируют расширение .o
как означающее, что файл содержит объект код, в качестве вывода путем компиляции. Предварительная обработка file.c
не производит код объекта . Он просто создает предварительно обработанный исходный код, который позже можно скомпилировать.
Обычное расширение файла для предварительно обработанного исходного кода C: .i
(.ii
для предварительно обработанного исходного кода на C++). Поэтому
gcc -E file.c > file.i
является подходящим выбором.
Вы обнаружите, что file.i
содержит препроцессорные линейные маркеры, например.
# 1 "file.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "file.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
...
...
Если вы не хотите, чтобы эти линии-маркеры появляются на выходе, добавьте параметр -P
:
gcc -E -P file.c > file.i
'НКУ -E pgcd.c -o x.o'? –
На первый взгляд, 'gcc', возможно, проигнорировал файл' x.o' (а не исходный файл C), милостиво сохраняя исходный файл 'pgcd.c' из-за стирания. (У вас есть резервная копия в вашей системе контроля версий VCS?). Параметр '-o' принимает аргумент имени файла, который перезаписывается выходом из того, что он делает. Будь осторожен! –
Я пробовал {gcc -E pgcd.c -o x} без расширения .o, как вы думаете, это работает, потому что был создан x-файл, поэтому pgcd.c не должен был быть перезаписан? –