以下代码中是否有UB?
#include <stdio.h>
int main(void)
{
int x;
printf("%d", 0*x);
return 0;
}
此处,变量x
未初始化,但乘以0
,结果传递给printf
。在数学上,传递给printf
的结果应该是0
,但我想在c语言中这会调用UB。如果变量没有乘以0
,那么它显然是UB,但我不确定在这种特殊情况下它是否为UB。
答案 0 :(得分:3)
是的,这是UB。
符合标准的编译器可能不会进行任何优化并在public T Get<T>(T t)
{
if (t is TypeA)
{
TypeA a = (TypeA)t; //error
}
}
中遇到陷阱表示
某些实现可能会为特殊值保留一些位,包括陷阱表示。
答案 1 :(得分:1)
这是未定义的行为,因为这可能会导致陷阱表示。
来自C standard:
未初始化的变量,第6.7.9节:
10 如果没有明确初始化具有自动存储持续时间的对象,则其值为 indeterminate 。
不确定的定义,第3.19.2节:
不确定价值
未指定的值或陷阱表示
陷阱表示的定义,第3.19.4节:
陷阱表示
不需要表示对象值的对象表示 型