作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做一些测试,并希望将输入文件直接传递给 C 编译器,而不是进行预处理。我怎样才能做到这一点?谢谢!
最佳答案
如果您不想预处理的源文件是 C 源文件 foo.c
,则将其重命名为 foo.i
。如果它是 C++ 源文件那么将其重命名为 foo.ii。这将导致编译器跳过预处理。像往常一样编译即可,例如
gcc -c -o foo.o foo.i
但是,如果您尝试编译包含预处理指令(“#”行)的源文件而不对其进行预处理编译将会失败,例如:
$ cat foo.c
#include <stdio.h>
int main()
{
puts("Hello world");
return 0;
}
$ cp foo.c foo.i
$ gcc -c -o foo.o foo.i
foo.i:1:1: error: stray ‘#’ in program
#include <stdio.h>
^
foo.i:1:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
#include <stdio.h>
^
可能您想要做的是编译一个已经预处理过的源文件再次对其进行预处理。在这种情况下,首先预处理 foo.c
,将输出写入 foo.i
,然后编译foo.i
:
$ cpp foo.c > foo.i
$ gcc -c -o foo.o foo.i
$ gcc -o foo foo.o
$ ./foo
Hello world
大概你会在创建它和编译它之间对foo.i
做一些事情;否则你不妨只编译foo.c
。
gcc in my machine is a symbolic link to clang
OS X?无论如何:您可以在上面的内容中用 clang
替换 gcc
。
关于c - 如何让gcc跳过预处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28207780/
我是一名优秀的程序员,十分优秀!