该文件有空行。
"a"
""
"b"
""
"c"
文件通过以下方法包含在程序中
fputs (
#include "file"
,stdout
);
实际结果:
abc
预期结果:
a
b
c
答案 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"
。