簡體   English   中英

函數參數匿名結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM