现在我有了这个
#include <zlib.h>
int main ()
{
puts (ZLIB_VERSION);
}
作为练习,有什么办法可以让它在一行编译,比如
#include <zlib.h>; int main (){ puts (ZLIB_VERSION); }
我可以让它在两行上编译,但是include阻止了一行。
答案 0 :(得分:5)
没有办法完全按照自己的意愿行事。话虽如此,如果这是构建系统的一部分,那么使用编译器的-E
选项来预处理包含简单
#include <zlib.h>
ZLIB_VERSION
然后解析输出。这样就可以避免运行编译器生成的程序,因此交叉编译时构建不会中断。
答案 1 :(得分:1)
不,include指令是独立的。
标准的相关部分是C11 6.10.2 Source file inclusion
,它将#include
指令定义为以下之一:
# include <h-char-sequence> new-line
# include "q-char-sequence" new-line
请注意,换行符是指令的整数部分。
我完全确定无论如何你需要它在一条线上。大多数可以输出文本的程序都可以很容易地将换行注入到流中,例如:
pax> printf '#include<stdio.h>\nint main(void){return puts("Hi"),0;}' \
...> | gcc -o testprog -xc -
pax> ./testprog
Hi
答案 2 :(得分:0)
这取决于您限制的文件数量。如果它不是,那么您可以添加包含所有代码的另一个文件,并#include
那个。 E.g:
include <zlib.h>
int main ()
{
puts (ZLIB_VERSION);
}
include "some_header.h"
但我认为这不是你真正想要的。像其他人说的那样,预处理器处理行,并且C中没有分隔符来为预处理器启动新行。 (有\
分隔符使预处理器将下一行视为当前行的延续,但不是反向。)
答案 3 :(得分:-1)
有点天真,标准C在源代码的末尾需要一个空的换行符,因此实际执行某些操作的单行程序是不可能的。
更新:C ++ 11中不再需要这样做