警告:#endif指令末尾有额外的标记

31

我正在使用VxWorks6.8 C++编译器编译一个相当大的项目。出现了以下警告:

警告:#endif指令末尾有额外的标记。

#ifndef _OM_NO_IOSTREAM
#ifdef WIN32
#ifndef USE_IOSTREAM
#define USE_IOSTREAM
#endif USE_IOSTREAM
#endif WIN32

我收到了很多这样的警告。

  1. 为什么我会收到这些警告,从C++标准的角度来看呢?
  2. 编译器为什么给出这些警告是有好的理由的吗?
  3. 如何最好地解决这个问题?

谢谢。

4个回答

44
#endif USE_IOSTREAM
#endif WIN32

应该是:

#endif // USE_IOSTREAM
#endif // WIN32

endif没有参数。这样的注释只是为了更好的可读性。

你还错过了在结尾处关闭#endif // _OM_NO_IOSTREAM


你能详细说明编译器为什么会抛出这个警告吗?谢谢。 - venkysmarty
有趣的是,这个解决方案在使用带有-cpp标志的gfortran(10.2.0)时不起作用。然而,在使用gcc时它可以正常工作。 - Addman
@Addman:不起作用是指什么?请确认你的“不起作用”与解决方案有关。 - Andriy Tylychko

18

由于在#endif之后不能再有任何内容。

此外,您缺少一个endif

#ifndef _OM_NO_IOSTREAM
  #ifdef WIN32
    #ifndef USE_IOSTREAM
      #define USE_IOSTREAM
    #endif
  #endif
#endif

不想太苛刻,但是在 #endif 后面你可以再加一个 #if 块,对吧? - Mehdi Charife
@MehdiCharife 是的,我想我是指在同一行上。 - Luchian Grigore

0
#endif USE_IOSTREAM
#endif WIN32
    // ^^^^^^^^^^^^ Compiler is warning about these extra tokens after endif directive.

#endif后不需要任何标识符。抑制这些警告的方法是将它们移除。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接