數組亂序初始化:sorry, unimplemented: non-trivial designated initializers not supported


問題描述

幫同事 debug 時,看到如下的 C 代碼:用中括號里的數值,指定元素在數組中的次序。第一次見這種用法,驗證一下。

#include <stdio.h>

int main(int argc, char* argv[])
{
    int arr[10] = {
        [9] = 9,
        [3] = 3,
        [4] = 4,
        [2] = 2,
    };

    for(int i = 0; i < 10; ++i)
        printf("%d ", arr[i]);
}

執行 gcc main.cpp 編譯,報錯:sorry, unimplemented: non-trivial designated initializers not supported
改用 gcc main.c 成功編譯,輸出結果:

0 0 2 3 4 0 0 0 0 9

結論

  • C 支持數組的亂序初始化,其語法是在數組聲明時,用 [INDEX] = value 指定數組某個元素的初始值

  • C++ 不支持亂序初始化,想要在聲明的時候初始化就必須按結構體里的順序依次初始化(C 支持的特性,C++ 不支持的並不多見)

  • gcc 處理 .cpp 文件時,默認采用 C++ 編譯規則

    編譯命令 默認編譯規則 結果
    g++ main.cpp C++ 編譯報錯
    gcc main.cpp C++ 編譯報錯
    g++ main.c C++ 編譯報錯
    gcc main.c C OK


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM