簡體   English   中英

初始化一個vanilla C結構

[英]Initializing a vanilla C struct

我想在C ++頭中添加一個C風格的結構,並在C函數中使用它。 但這不起作用:

struct Vertex {
float Position[2];
float Color[4];
};

struct Square{
Vertex vertices[4];
};

別處:

float color[4]={rColor, gColor, bColor, alpha};
float halfsize=(float)size/2;

Square square= {
    {{halfsize,halfsize},{color[0],color[1],color[2],color[3]}},
    {{halfsize,-halfsize},{color[0],color[1],color[2],color[3]}}, //error on this line
    {{-halfsize,-halfsize},{color[0],color[1],color[2],color[3]}},
    {{-halfsize,halfsize},{color[0],color[1],color[2],color[3]}}
};

在第二行報告“struct initializer中的多余元素”。

在相關的說明中,是否有更有效的方法將數組color傳遞給square集?

你需要為Vertex vertices[4];的初始化器添加一個額外的括號 Vertex vertices[4];

                \/   
Square square= {{
    {{halfsize,halfsize},{color[0],color[1],color[2],color[3]}},
    {{halfsize,-halfsize},{color[0],color[1],color[2],color[3]}}, //error on this line
    {{-halfsize,-halfsize},{color[0],color[1],color[2],color[3]}},
    {{-halfsize,halfsize},{color[0],color[1],color[2],color[3]}}
}};
^

正如另一個回答者提到的那樣,你應該添加一個額外的支撐,然后事情就會起作用。

但是,您也會問這是否是一種更有效的color傳遞方式。

我擔心我不認為有。 由於C和C ++都沒有跟蹤數組的長度,並且由於沒有用於拼接數組的構造,因此無法向編譯器指示您希望復制數組的某個部分。

但是你的效率是什么意思呢? 如果你的意思是“有沒有辦法可以更快地執行?” 然后答案幾乎肯定沒有。 這種初始化將非常快。

如果你的意思是“有沒有一種方法可以用更少的代碼行編寫?” 然后答案可能是否定的。 六條線很緊。

當然,你使用的是C ++標頭,所以我認為你也必須使用C ++編譯器,因此在純C中構建這部分代碼似乎毫無意義。你可以將color變成STL向量然后構建一些構造函數用於初始化此向量的SquareVertex 它不會占用更多的代碼,並可能減少意外錯誤的可能性。

或者,如果您設置為C並計划一次又一次地出現此代碼,您可以考慮使用宏(如下所示,或者對於整個血腥的東西,但是我會說它會更好把它放在一個函數中):

#define RGB_INIT {color[0],color[1],color[2],color[3]}

雖然宏確實有它們的危險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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