2012-05-26 35 views
0

我知道一个数组的初始值为0时定义为静态,否则未定义,但我不完全确定当数组是typedef'd时这是相同的方式。我想是的,但我想确认一下。C typedef'd数组 - 初始值是什么?

只是为了说清楚,我的意思是这样的:

typedef float vector3[3]; 

int main (int argc, char* argv) { 
    vector3 vec; 
    static vector3 vec2; 
} 

的VEC变量将是不确定的,不是吗?那么vec2呢?它应该是全0,对不对?

+1

'typedef'只是让你可以得到一个更简单的名字。无论如何,编译器假装你输入了整个东西。 – robert

+0

不,初始值不确定,不确定。它具有在内存位置找到的任何值,或任何值给编译器的值。如果此值碰巧是基本类型的陷阱表示,则它只会是未定义的行为。 –

+0

在我这边,单词的错误选择,我认为可以调用undefined的初始值,但我看到了不同之处。感谢您的澄清。 – uorbe001

回答

2

是的,vec中的值是未定义的; vec2中的值将全部为零。

在定义或声明变量时,使用typedef不会影响该类型的行为。

+0

'vec'中的值是不确定的。这*可能会导致未定义的行为,如果它是由巧合的底层基类型(这里'浮动')陷阱表示。 –

+0

如果您在存储合法内容之前阅读值,它只会导致未定义的行为。如果确保在读取之前将值初始化,则不存在未定义行为的风险。当然,这个问题意味着代码可能正在计划在确保它们被初始化之前读取这些值,并导致未定义的行为,但未定义的值本身并不会导致未定义的行为。所以,我认为'未定义'(值)和'未定义行为'(可能由读取未定义的值导致)是分开的。 –

+0

只不过那里已经有了一个不同的术语,即“不确定的价值”。 –

1

typedef s对代码的语义完全没有影响。这包括初始值。