小编val*_*rio的帖子

#if 0作为定义

我需要一种方法来定义一个FLAGS_IF宏(或等价物)

FLAGS_IF(expression)
<block_of_code>
FLAGS_ENDIF
Run Code Online (Sandbox Code Playgroud)

在调试中编译时(例如,使用特定的编译器开关)编译为

if (MyFunction(expression))
{
    <block_of_code>
}
Run Code Online (Sandbox Code Playgroud)

而在发布中不会产生任何指令,就像它是这样的

#if 0
    <block_of_code>
#endif
Run Code Online (Sandbox Code Playgroud)

在我对C/C++预处理器问题的无知中,我无法想到这样做的任何天真的方式(因为#define FLAGS_IF(x) #if 0甚至没有编译),你能帮忙吗?

我需要一个解决方案:

  • 如果*/内部存在,不会搞砸<block_of_code>
  • 即使在任何深度的内联函数内也一定会在发布中生成0条指令(我想这不包括在内if (false){<block_of_code>}吗?)
  • 如果可能,是否符合标准

macros c-preprocessor

12
推荐指数
3
解决办法
3865
查看次数

C2070 - 非法大小的操作数

以下代码对我来说很好看:

    #include <stdio.h>

    template <typename T>
    struct A
    {
        static float m_kA[];
    };

    template <typename T>
    float A<T>::m_kA[] = {1.0f, 2.0f, 3.0f};

    int main()
    {
        printf("%d\n", 
            sizeof(A<unsigned int>::m_kA) /
            sizeof(A<unsigned int>::m_kA[0]));
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

但是当我用VC9编译时,我得到以下错误

error C2070: 'float []': illegal sizeof operand
Run Code Online (Sandbox Code Playgroud)

我希望这段代码能够编译.我错过了什么吗?有没有人知道一种方法来解决这种奇怪的行为(请注意,没有模板的完全相同的事情编译好并输出3).

请注意,删除模板不是一个选项,我做了这个例子来重现我在代码中的问题,我需要包含数组的类型作为模板.

谢谢

c++ sizeof visual-studio-2008 visual-c++

8
推荐指数
2
解决办法
6128
查看次数