相关疑难解决方法(0)

为什么文本文件以换行符结尾?

我假设这里的每个人都熟悉所有文本文件应以换行符结尾的格言.多年来我一直都知道这个"规则",但我一直在想 - 为什么?

unix newline file text-files

1375
推荐指数
15
解决办法
21万
查看次数

"文件末尾没有换行符"编译器警告

在某些C++编译器中出现以下警告的原因是什么?

文件末尾没有换行符

为什么我应该在源/头文件的末尾有一个空行?

c++ compiler-construction warnings c-preprocessor

180
推荐指数
6
解决办法
9万
查看次数

文件结束警告时反斜杠换行符

使用此代码:

#include <iostream>


int main(int argc, char *argv[])
{

  return 0;
}


/** run2: A macro to call a function. */
#define run2( function, ctype, dim ) \
if ( operation == #function ) \
{ \
  if ( componentType == #ctype && Dimension == dim ) \
  { \
    typedef itk::Image< ctype, dim > ImageType; \
    function< ImageType >( inputFileName, outputFileName, radius, algorithm, useCompression ); \
    supported = true; \
  } \
}
Run Code Online (Sandbox Code Playgroud)

我收到一个警告:文件末尾的反斜杠换行符

知道怎么让它消失吗?

大卫

c++

11
推荐指数
2
解决办法
8000
查看次数

为什么 GCC 不会在文件末尾生成任何有关换行符的警告?

C11 5.1.1.2 翻译阶段

第 2 段:

[...]非空的源文件应以换行符结尾,在发生任何此类拼接之前,换行符前面不应紧接反斜杠字符。

这意味着每个源文件都必须以换行符结尾。

例子:

#include <stdio.h>

int main() 
{
    printf("Hello world\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的示例使用命令在 Clang 上编译clang prog.c -Wall -Wextra -std=gnu11 -pedantic。编译器生成以下警告:

prog.c:7:16: warning: no newline at end of file [-Wnewline-eof]
}
               ^
Run Code Online (Sandbox Code Playgroud)

没关系,因为源文件末尾没有换行符。

我使用gcc prog.c -Wall -Wextra -std=gnu11 -pedantic命令在 GCC 上编译了上述程序。GCC 不会生成任何警告或错误。

那么,为什么 GCC 不生成任何警告或错误呢?

  1. Clang 现场演示

  2. GCC 现场演示

c gcc newline clang

5
推荐指数
1
解决办法
1664
查看次数