2013-08-25 69 views
0

是療法的方式使用結構成員的名字最初一個const實例初始常量的typedef的成員名稱(MS Visual Studio中)C結構

typedef struct { 
    int i1; 
    int i2; 
    int i3; 
} info_t; 

//- GCC 
const info_t info = { 
    .i1 = 1, 
    .i2 = 2 
} 

//- VS 
const info_t info = {1,2,0); 

的GCC允許這個方便的方式,但Visual Studio導致錯誤C2143「Syntax error:missing}」之前。「... GCC還允許省略成員(請參閱示例:info.t3未設置)

有沒有人知道簡單的方法來生成兼容並很容易閱讀VS的解決方法代碼?

回答

1

它被稱爲指定的初始化程序它是在C99中引入的。

但Visual Studio中沒有對C99的支持,現在,所以,不,你不能做到這一點在Visual Studio中的話,你必須堅持到C89方式:

const info_t info = {1,2,0); 

然而,根據Visual Studio路線圖上的MSDNInfoq,在Visual Studio 2013 RTM中會有一些對C99的支持,並且此功能就是其中之一。

+0

謝謝。我知道這一點,但有沒有解決方法? – Thomas

+0

@Thomas根據http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013 .aspx,在Visual Studio 2013中會有一些對C99的支持,我不知道這個功能是否會成爲其中的一個。 –

+0

@YuHao,_Additionally,一些C99核心語言特徵將在2013 RTM來實現: * C99 _Bool * C99複合文字 * C99指定的初始 * C99可變declarations_(〔也可參見本]( http://www.infoq.com/resource/news/2013/07/vs2013_CPP_compliance/en/resources/VC_Roadmap.png)) – chris