如何在执行时保留新行:#include“file”

时间:2017-07-28 15:11:36

标签: c

该文件有空行。

"a"
""
"b"
""
"c"

文件通过以下方法包含在程序中

fputs (
#include "file"
,stdout
);

实际结果:

abc

预期结果:

a

b

c

3 个答案:

答案 0 :(得分:3)

C合并由空格分隔的字符串文字。当你写

"a"
""
"b"
""
"c"

C编译器将它们合并到"abc";编译代码后,您无法检测到两个源之间的差异。

如果您想要换行符,请将它们明确地插入到字符串文字中:

"a\n"
"\n"
"b\n"
"\n"
"c"

答案 1 :(得分:2)

 fputs (
 #include "file"
 ,stdout
 );

是合法的,但品味不佳,反对大多数编码惯例。

dashblinkenight's answer很好地解释了什么,我不会重复。

但是,我建议采用另一种方法。修改你的构建系统(例如你的Makefile,如果使用GNU make)到生成一个更好(更漂亮)file.inc,它将包含完整的陈述,也许是一系列的

WRITELINE("a");
WRITELINE("");
WRITELINE("b");
WRITELINE("");

然后,之前你的#include "file.inc"添加你的C文件:

#define WRITELINE(Lin) do { fputs(Lin,fil); fputc('\n', fil); } while(0)

(此question有很好的答案解释我为什么要使用do{ ... }while(0) ....)

您可以轻松生成这样的fil.inc(可能来自您的fil,其中一些make规则会调用sed或其他内容。

PS。实际上,生成C代码是个好主意。

答案 2 :(得分:-2)

我同意上述答案,但您可能还想添加"\r"。有些系统需要它。这个字符将是回车(13)。因此,您可以在字符之间放置"\n\r"