相关疑难解决方法(0)

131
推荐指数
4
解决办法
12万
查看次数

如果a未初始化,是^ a还是aa未定义的行为?

考虑这个程序:

#include <stdio.h>

int main(void)
{
    unsigned int a;
    printf("%u %u\n", a^a, a-a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是不确定的行为?

从表面上看,它a是一个未初始化的变量.所以这指向未定义的行为.但是a^a并且a-a等于0所有的价值a,至少我认为是这样的.有可能有某种方式来证明行为是明确定义的吗?

c undefined-behavior

74
推荐指数
2
解决办法
3332
查看次数

使用未初始化的变量和编译器(GCC)的乐趣

C++标准的第3.9.1/6节说,

bool类型的值是true或者false.

现在考虑这段代码,

void f(bool b)
{
    switch(b) //since b is bool, it's value can be either true or false!
    {
        case true: cout << "possible value - true";  break;
        case false: cout << "possible value - false"; break;
        default: cout << "impossible value";
    }
}
int main()
{
    bool b; //note : b is uninitialized
    f(b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编 F:\workplace>g++ test.cpp -pedantic

跑.输出:

不可能的价值

出乎意料的输出?嗯,不是真的,因为标准在§3.9.1/ 6的脚注中读到:

以本国际标准描述的方式将bool值用作 "未定义",例如通过检查未初始化的自动对象的值,可能会使其表现为既不是真也不是假 …

c++ compiler-construction gcc initialization undefined-behavior

17
推荐指数
1
解决办法
2621
查看次数

C/C++:将0赋值给无符号长变量或者将变量与自身进行xor分解是否更快?

我意识到差异可以忽略不计,但是在尝试将无符号长度归零时哪个更有效?

unsigned long x;

...

x=0;

--OR--

x^=x;
Run Code Online (Sandbox Code Playgroud)

泰勒

c c++ performance xor variable-assignment

9
推荐指数
2
解决办法
1184
查看次数

"(f(x))+ g(y)"能否确保在C++中首先调用f(x)?

并且f(x)+(g(y))可以确保g(y)先打电话吗?我知道表达式中的顺序在很多情况下是未定义的,但在这种情况下括号是否有效?

c++ sequence-points

4
推荐指数
2
解决办法
402
查看次数

使用puts输出C int是否有更短的方法?

我需要在基于USB(libusb)C的命令行实用程序中执行以下操作:

char pid[20];
sprintf(pid, "Product ID : %#06x", anInteger);
puts(pid);
Run Code Online (Sandbox Code Playgroud)

有没有更短的单线方式来做到这一点?

c

0
推荐指数
2
解决办法
163
查看次数