有关访问未初始化变量是否产生未定义行为的讨论已经进行了几次(例如在这个SO答案中),我也查看了关于未确定值和未定义行为的这份在线C11草案标准。
从SO和标准中发现(也许我有所疏漏),当访问未初始化变量时,未定义行为与陷阱表示或具有(隐式)寄存器存储类别的可能性有关。
但是,如果相应的变量是一个数组(无法获得寄存器存储类别),而且数据类型不能有陷阱表示(例如根据6.2.6.1p5对字符类型的定义)呢?
那么,访问这样的值仍然会产生未定义行为吗?
int main () {
char output[10];
for (int i=0; i<10; i+= 2) { // initializing every 2nd element only
output[i] = '0' + i;
}
char c = output[1]; // accesses something "uninitialized"; But is it UB?
printf("%c\n", c); // prints probably garbage; But what if I don't care?
return 0;
}