【问题标题】:warning: extra tokens at end of #endif directive警告:#endif 指令末尾的额外标记
【发布时间】:2011-09-19 07:59:53
【问题描述】:

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

谢谢

【问题讨论】:

    标签: c++


    【解决方案1】:

    应该是:

    #endif // USE_IOSTREAM
    #endif // WIN32
    

    endif 不接受任何参数。放置此类 cmets 只是为了便于阅读

    编辑:

    你错过了最后关闭#endif // _OM_NO_IOSTREAM

    【讨论】:

    • 您能否详细说明编译器抛出此警告的充分理由?谢谢
    • 有趣的是,此解决方案不适用于带有 -cpp 标志的 gfortran (10.2.0)。但是,gcc 确实如此。
    • @Addman:怎么不工作?请检查您的“不起作用”是否与解决方案有关
    【解决方案2】:

    因为#endif之后你什么都没有

    另外,你缺少一个 endif。

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

    【讨论】:

      【解决方案3】:
      #endif USE_IOSTREAM
      #endif WIN32
          // ^^^^^^^^^^^^ Compiler is warning about these extra tokens after endif directive.
      

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-29
          • 2014-09-07
          相关资源
          最近更新 更多