相关疑难解决方法(0)

未定义的未定义行为如何?

我不确定我是否完全理解未定义行为可能危及程序的程度.

假设我有这段代码:

#include <stdio.h>

int main()
{
    int v = 0;
    scanf("%d", &v);
    if (v != 0)
    {
        int *p;
        *p = v;  // Oops
    }
    return v;
}
Run Code Online (Sandbox Code Playgroud)

这个程序的行为是否针对v非零的情况而定义,或者即使v为零也未定义?

c undefined-behavior language-lawyer

34
推荐指数
3
解决办法
1759
查看次数

是否有"条件表达式不变"的gcc警告?

我继承了一个相当大的代码库,不知怎的,有人编写了几个这样的条件:

enum
{
    FOO_TYPE_A,
    FOO_TYPE_B,
    FOO_TYPE_C,
    FOO_TYPE_D
};

void bar(int fooType)
{
    if (fooType == FOO_TYPE_A || FOO_TYPE_B) // <-- This will always be true, since FOO_TYPE_B is nonzero!
    {
        // Do something intended for only type A or B
    }

    // Do things general to A,B,C,D
}
Run Code Online (Sandbox Code Playgroud)

条件检查应该明确是:

    if (fooType == FOO_TYPE_A || fooType  == FOO_TYPE_B)
Run Code Online (Sandbox Code Playgroud)

在gcc中是否有警告我可以打开以找到它们,类似于MSDN的C4127

具体来说,我使用的是Android NDK r9d.

如果没有,为什么不呢?对于无意识的赋值,无符号> 0以及上述愚蠢似乎都是有用的.

编辑:使代码更详细,以说明问题.

c c++ gcc android-ndk

5
推荐指数
1
解决办法
916
查看次数

标签 统计

c ×2

android-ndk ×1

c++ ×1

gcc ×1

language-lawyer ×1

undefined-behavior ×1