我遇到了这段代码
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{ int b=20;
case 1: printf("b is %d\n",b);
break;
default:printf("b is %d\n",b);
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我预计输出为20但有一些垃圾值.将此代码编译为.c文件和.cpp文件时输出是否会不同?
在C++中,代码格式不正确,因为跳转到了case 1初始化b.你不能这样做.
在C中,代码调用UB是因为使用了未初始化的变量b.
C99 [6.4.2/7]也显示了一个类似的例子.
示例在人工程序片段中
Run Code Online (Sandbox Code Playgroud)switch (expr) { int i = 4; f(i); case 0: i = 17; /* falls through into defaultcode */ default: printf("%d\n", i); }标识符为i的对象存在自动存储持续时间(在块内)但从未初始化,因此如果控制表达式具有非零值,则对printf函数的调用将访问不确定的值.同样,无法访问函数调用
f.
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |