调用printf("%d")两次,const结果

Lee*_*Gup -1 c printf

我写了以下程序:

#include<stdio.h>

int main(){
        printf("%x\n");
        printf("%x\n");
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道它是未定义的行为,我只是检查发生了什么.编译器是gcc.

样本输出是:

541d3118
7ffffff7
Run Code Online (Sandbox Code Playgroud)

另一个示例输出是:

e0b08078
7ffffff7
Run Code Online (Sandbox Code Playgroud)

当我使用-O3flag 编译它时,结果是:

5ec20f18
9
Run Code Online (Sandbox Code Playgroud)

3bedfa08
9
Run Code Online (Sandbox Code Playgroud)

为什么第一个值会改变,而不是第二个值?为什么高优化级别的第二个值不同?

izo*_*ica 5

您正在调用printf而不指定具有格式说明符的值%x.这会调用未定义的行为,因此您观察到的可能是巧合或特定于编译器的实现.无论哪种方式调用未定义的行为都不是代码中的好东西.