2014-01-25 30 views
0

我正在通過arcsynthesis OpenGL教程,它定期使用宏,我一直在閱讀的東西,我應該儘可能避免。我不知道是否有執行以下操作,而不在值手動填寫的另一種方式(或者,如果這是我應該做的):用C++中的逗號預處理器宏

#define GREEN_COLOR 0.75f, 0.75f, 1.0f, 1.0f 

const float vertexData[] = { 
    ..., //Vertex positions 

    GREEN_COLOR, 
    GREEN_COLOR, 
    GREEN_COLOR, 

    ..., //Rest of the colors 
} 
+0

目前仍不清楚你用這個宏試圖做什麼。你只是試圖自動創建數組來獲得這些值嗎? – JaredPar

+0

非常多,這將創建一個地方來改變綠色的價值,而不是在多個地方進行編輯。 – bitrayne

+1

我想不出一個更簡單的方法來做到這一點在我的頭頂。爲了減輕你對宏的擔憂,你可以在聲明vertexData後立即'#undef GREEN_COLOR';這種方式符合其目的,但不能在以後被濫用。 – MicroVirus

回答

0

預處理不關心逗號,空格,。它將它們視爲任何其他角色,並簡單地用它們進行文本替換。唯一需要注意的是換行符,但行尾的尾部\也會照顧它們。例如:

#define GREEN_COLOR 0.75f,\ 
        0.75f,\ 
        1.0f, \ 
        1.0f 
+0

好吧,也許這是宏指令最佳工作時間之一。 – bitrayne

+0

@bitrayne還有更多,如果你深入瞭解boost源代碼頭文件 – texasbruce