Gcc不提供有关文件结尾换行符的警告

Gcc不提供有关文件结尾换行符的警告,c,gcc,C,Gcc,我试图用c编写一个著名的hello world程序,并使用以下命令进行编译: gcc -Wall -Wextra -pedantic -std=c99 main.c -o exeFile 但我并没有得到关于C标准中5.1.1.2的任何警告(文件末尾的换行符) 我使用Vim editor实现了这一点,还通过键入以下内容禁用了换行设置: set binary set noeol 我想知道如何生成此警告 通用条款:5.4.0 这是源文件: 这是编译器的输出: 这是在GCC 4.3.2时间框架中

我试图用c编写一个著名的hello world程序,并使用以下命令进行编译:

gcc -Wall -Wextra -pedantic -std=c99 main.c -o exeFile
但我并没有得到关于C标准中5.1.1.2的任何警告(文件末尾的换行符)

我使用Vim editor实现了这一点,还通过键入以下内容禁用了换行设置:

set binary 
set noeol
我想知道如何生成此警告

通用条款:5.4.0

这是源文件:

这是编译器的输出:


这是在GCC 4.3.2时间框架中经过深思熟虑做出的决定,并结转至后续版本:


您是说一个非空的源文件应以一个新行字符结尾,在进行任何此类拼接之前,该新行字符前面不应紧跟反斜杠字符。是的,我是说这个。如果您使用GCC 5.4.0,那么,该版本的文档肯定比早期版本的文档更合适。无论哪种方式,如果你提供了一个更具体的GCC文档引用,以便于在上下文中查看文章,这都会很有帮助。如果你没有一个换行符作为文件的最后一个字符,你会看到这一点。警告说明了它是什么。你不能仅仅从这个简单的测试中得出这个结论!你会说纽约比洛杉矶更安全,因为市政厅的电梯在一层地下室发出声音通知,而不是在另一层吗?在这种情况下,该程序将被视为UB,或者??如果它将使其成为UB,编译器将发出警告。这对GCC来说不是问题。好的,当在eof省略换行符时,程序被认为是UB吗?根据C标准,它仍然是UB,但是GCC选择定义行为。(还有许多其他类似的情况。)程序是一致的,因为至少存在一个将其翻译为程序员预期的实现,但它不是严格一致的,因为它依赖于一个特定实现在这种标准未定义行为的情况下所做的事。