[英]What are the values in a struct when uninitialized?
假設我有一個結構:
typedef struct{
int a;
float b;
} stuff;
如果我有類似的代碼:
stuff myStuff;
printf( "%d", myStuff.a ) ;
我會得到什么? 是否總是將字段初始化為0?
在C11中,任何未顯式初始化的結構成員(如您的情況)都具有不確定的值。 C11 6.7.9 / 10:
如果未自動初始化具有自動存儲期限的對象,則其值不確定。
讀取這樣一個不確定的值會產生不確定的行為。 C11 6.3.2.1/2:
如果左值指定了可以使用
register
存儲類聲明的自動存儲持續時間的對象(從未使用其地址),並且該對象未初始化(未使用初始化器聲明,並且在使用前未對其進行任何賦值) ),則行為未定義。
最后,附件J.2(未定義的行為)對此進行了澄清:
在以下情況下,行為是不確定的:
- 具有自動存儲期限的對象的值在不確定時使用(6.2.4、6.7.9、6.8)。
否。該字段可以有任何值。 這樣做是錯誤的,因為該值是不可預測的。
這取決於結構的對象是具有靜態存儲持續時間還是它是本地對象。 如果結構的對象具有靜態存儲持續時間,則將其所有數據成員初始化為零。 否則,該對象將不會初始化。
例如
#include <stdio.h>
typedef struct
{
int a;
float b;
} stuff;
stuff s1; // initialized by zeroes
int main( void )
{
stuff s2; //indetermined values
printf( "%d\n", s1.a ) ; // 0 will be outputed
printf( "%d\n", s2.a ) ; // any value can be outputed
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.