提问人:sauce 提问时间:9/17/2023 更新时间:9/17/2023 访问量:52
如何在 c 中以换行符结束文件?[已结束]
How to end a file in a newline in c? [closed]
问:
printf("\n");
return 0;
}
#endif
大家好,
这些是我代码的最后几行,这是你在 C 中用换行符结束文件的方式吗?或者,当他们说您应该始终以换行符结束文件时,他们的意思是其他含义吗?
当我尝试在endif下放置换行符时,它给了我一个错误,所以我只能把它放在那里,还是我不应该打印换行符?我应该根据我的学校用换行符提交它,但我不确定这是否正确。
答:
2赞
Clifford
9/17/2023
#1
该片段以 (from ) 结尾。该文件应以空行结尾:f
#endif
printf("\n");
return 0;
}
#endif
问题(理论上)是任何文件都可以是 'd,所以例如,如果你有一个以 xx.h 结尾的标头,并说一个 yy.h 开始 ,代码:#include
#endif
#if
#include“xx.h” #include“yy.h”
包含后的预处理器将看到:
#endif#if
都在一条线上,会失败。当然,还有许多其他语法废话可以通过这种方式生成。通常你会侥幸逃脱,因为任何类型的大多数源文件都是以样板注释开头的,这通常是语义和句法上良性的。在现代编译器上,您通常会收到格式错误的源的诊断警告。
在 C++ 中,编译器需要表现得好像有换行符一样,即使它没有显式以避免此问题。这可能也在后来的 C 标准中(我没有看过),或者我猜编译器可能会选择在任何情况下隐式添加它并发出警告。
评论
0赞
Charles Duffy
9/17/2023
如果将文件另存为正确的 UNIX 文本文件,则不需要显式空行(就像在 UNIX 上一样,换行符终止行,并且在每行之后都是必需的,而不是分隔行并且仅在它们之间需要)。只有面向 Windows 的工具需要添加额外/空行才能具有终止换行符。
0赞
Charles Duffy
9/17/2023
它避免的问题远不止这个问题:例如,UNIX shell 中的循环将忽略任何没有尾随换行符的行。这是黑字POSIX规范,而不仅仅是约定:参见 pubs.opengroup.org/onlinepubs/9699919799/basedefs/...和 pubs.opengroup.org/onlinepubs/9699919799/basedefs/...while read
0赞
Charles Duffy
9/17/2023
绝对有执法。开放组是决定您的操作系统是否经过 UNIX 认证并能够使用商标的人。
0赞
Charles Duffy
9/17/2023
你告诉人们制作 git 会标记警告的文件(就像文件末尾的空行和行尾的空格一样)作为错误配置的解决方法,首先可以通过始终如一地为您的目标平台使用正确的编辑器配置来避免这些错误配置(以及为同一平台构建的 C 预处理器);这是站不住脚的,我会不断纠正那些听从你的“建议”的同事提交的文件(或者,更确切地说:我会调整我们的 CI 以拒绝这些文件,这样他们就永远不会进入共享分支)。
评论
printf("\n");
return 0;
}
#endif