警告:#endif指令末尾有多余的标记

warning: extra tokens at end of #endif directive

本文关键字:多余 #endif 指令 警告      更新时间:2023-10-16

我正在使用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. 解决这个问题的最佳方法是什么

感谢

#endif USE_IOSTREAM
#endif WIN32

应为:

#endif // USE_IOSTREAM
#endif // WIN32

endif不接受任何参数。放置这样的注释只是为了提高可读性。

您还错过了最后关闭#endif // _OM_NO_IOSTREAM

因为#endif 之后不能有任何东西

此外,您还缺少一个endif。

#ifndef _OM_NO_IOSTREAM
  #ifdef WIN32
    #ifndef USE_IOSTREAM
      #define USE_IOSTREAM
    #endif
  #endif
#endif
#endif USE_IOSTREAM
#endif WIN32
    // ^^^^^^^^^^^^ Compiler is warning about these extra tokens after endif directive.

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

通常不将文本放在#endif后面。(您缺少OM_NO_IOSTREAM的#endif(

http://msdn.microsoft.com/en-us/library/ew2hz0yd%28v=vs.80%29.aspx