【问题标题】:Strange preprocessing奇怪的预处理
【发布时间】:2011-02-15 10:16:33
【问题描述】:

发生了一些奇怪的事情。

我的代码中有一个本地函数

#ifdef abc
.
.
.
#endif

当我在文件顶部写字时

#define abc

它的行为就像它没有被定义一样。只有当我定义

#define abc

在本地函数本身中,它读取 ifdef 中的代码。

这很奇怪,因为我认为编译器只是遍历整个文件而没有更改 # 预处理顺序的函数细节。无法理解发生了什么。我正在使用visual-studio 2005。

【问题讨论】:

    标签: c++ visual-studio c-preprocessor


    【解决方案1】:

    您可能在#include "stdafx.h" 之前有#define。这被忽略了。

    【讨论】:

    • 大声笑这是视觉工作室的错误还是“功能”?
    • @VJo:这是一个众所周知的使用预编译头文件的警告:如果不能保证在其他所有内容之前包含预编译头文件,那么实现预编译头文件几乎是不可能的(因为包含的标题在不同的翻译单元中会有所不同)。 Visual C++ 在忽略出现在预编译标头包含之前的标记时不会警告您这一事实是一个“功能”。
    【解决方案2】:

    我认为您在发布模式下运行示例。所以某些代码块无法在发布模式下执行。您所做的复制该行并粘贴到某处以便它工作。

    上一个答案不正确。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 2023-03-10
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      相关资源
      最近更新 更多