[英]Function argument anonymous struct
我們許多人都知道這可行:
struct data_s
{
uint32_t p_1;
uint32_t p_2;
uint32_t p_3;
uint32_t p_4;
};
void foo(struct data_s data)
{
printf("p1: %d\r\n", data.p_1);
printf("p2: %d\r\n", data.p_2);
printf("p3: %d\r\n", data.p_3);
printf("p4: %d\r\n", data.p_4);
}
int main(void)
{
foo((struct data_s){
.p_1 = 1,
.p_2 = 2,
.p_3 = 3,
.p_4 = 4});
}
我已經看過很多次了,但是現在在C參考手冊中找不到關於它的任何內容。 是否定義了此構造標准或實現?
另外,這種類型轉換有點奇怪,因為它更像是“我將告訴編譯器如何分配,分配什么以及如何安排它”而不是“將類型轉換為這種類型”。 傳遞給函數的參數在內存中的數據布局是否將與struct data_s obj;
創建的對象完全相同struct data_s obj;
?
這是復合文字 。
我是在C99中引入的,它與其他常量和文字之間沒有區別。
通過網絡:
復合文字表達式構造一個由type指定的類型的未命名對象,並將其初始化為initializer-list指定的類型。
復合文字的類型為type(類型為未知大小的數組時除外;其大小與數組初始化中一樣,從initializer-list推導得出)。
復合文字的值類別為左值(可以使用其地址)。
如果復合文字出現在文件范圍內,則復合文字所評估的未命名對象將具有靜態存儲持續時間;如果復合文字出現在塊范圍內,則其將具有自動存儲持續時間(在這種情況下,對象的生存期在封閉塊的末尾結束)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.