[英]Odd use of curly braces in C
抱歉問了一個簡單的問題,但我正在度假,正在閱讀一本關於核心音頻的書,而且我沒有帶 C 或 Objective C 的書......
這個變量定義中的花括號有什么作用?
MyRecorder recorder = {0};
假設MyRecorder
是一個struct
,這MyRecorder
每個成員設置為它們各自的零表示( 0
表示整數, NULL
表示指針等)。
實際上,這也適用於所有其他數據類型,例如int
、 double
、指針、數組、嵌套結構……,您可以想象的一切(感謝 pmg 指出這一點!)
更新:從上面鏈接的網站中摘錄的引用,引用了 C99 的最終草案:
[6.7.8.21] 如果花括號括起來的列表中的初始值設定項少於聚合的元素或成員,[...] 聚合的其余部分應隱式初始化,與具有靜態存儲持續時間的對象相同。
它根據 C99 標准將recorder
結構的所有成員初始化為0
。 看起來它用0
位初始化結構的每一位。 但並非每個編譯器都如此。
請參閱此示例代碼,
#include<stdio.h>
struct s {
int i;
unsigned long l;
double d;
};
int main(){
struct s es = {0};
printf("%d\n", es.i);
printf("%lu\n", es.l);
printf("%f\n", es.d);
return 0;
}
這是輸出。
$ ./a.out
0
0
0.000000
它是一個結構的初始化。
實際上,它不會初始化結構的所有元素,只是初始化第一個元素。 但是,其他的會自動初始化為 0,因為這是 C 標准要求做的。
如果你把:MyRecorder recorder = {3};
第一個元素將為 3,其他元素將為 0。
與 C++11 不同,在 C99 中,初始化括號中必須至少有一個元素。
C++11 結構:
MyRecorder recorder{};
C結構:
MyRecorder recorder = {0};
MyRecorder
可能是以下之一,您正在嘗試用零初始化所有元素
typedef struct _MyRecorder1 {
int i;
int j;
int k;
}MyRecorder1;
typedef int MyRecorder2[3];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.