問題描述
幫同事 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