一线C程序包括?

时间:2012-03-09 17:24:46

标签: c gcc include

现在我有了这个

#include <zlib.h>
int main ()
{
    puts (ZLIB_VERSION);
}

作为练习,有什么办法可以让它在一行编译,比如

#include <zlib.h>; int main (){ puts (ZLIB_VERSION); }

我可以让它在两行上编译,但是include阻止了一行。

4 个答案:

答案 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:

some_header.h:

include <zlib.h> 
int main () 
{
    puts (ZLIB_VERSION); 
}

main.c中:

include "some_header.h"

但我认为这不是你真正想要的。像其他人说的那样,预处理器处理行,并且C中没有分隔符来为预处理器启动新行。 (有\分隔符使预处理器将下一行视为当前行的延续,但不是反向。)

答案 3 :(得分:-1)

有点天真,标准C在源代码的末尾需要一个空的换行符,因此实际执行某些操作的单行程序是不可能的。

更新:C ++ 11中不再需要这样做