vala程式預處理指令
百度了很久都找不到關於vala程式預處理指令的中文資料,於是我到官網找了英文資料,現在作一下簡單介紹。本身就很簡單!
預處理指令的作用
當我們需要選擇性的編譯某一部分程式碼時,例如某個函式在windows上和linux上需要不同的程式碼來實現,就需要在程式中加入預處理指令,編譯時使用巨集來指定跳過哪些程式碼、編譯哪些程式碼。
邏輯選擇指令
一共有4個:
#if #elif #else #endif
上面4個指令的意思一目瞭然,#if
和#elif
後面跟上巨集作為條件。程式中是這樣的:
#if COND1 [ vala code 1 ] #elif COND2 [ vala code 2 ] #else [ vala code 3 ] #endif
定義巨集
vala
程式內部是不能定義巨集的,只能使用valac
的引數-D
定義,用法如下:
valac -D CONDX program.vala
巨集表示式
#if
和#elif
後面的條件表示式不但可以是單獨的巨集,還可以是幾個巨集的邏輯表示式,格式如下:
-
“或”表示式:
COND1 [ || COND2 ]
-
“與”表示式:
COND1 [ && COND2 ]
-
“非”表示式:
! COND1
(英文資料裡!
後面有空格,經本人驗證,有無空格都可以) -
“等於”表示式:
COND1 == COND2
(一個存在,一個不存在) -
“不等於”表示式:
COND1 != COND2
(兩個都存在)
一個巨集的名字如果定義了,它的值就是true
,否則就是false
。利用括號可以組合多個表示式。
下面是英文資料:\
vala-code: [ any vala code ] [ pp-condition ] [ any vala code ] pp-condition: #if pp-expression vala-code [ pp-elif ] [ pp-else ] #endif pp-elif: #elif pp-expression vala-code [ pp-elif ] pp-else: #else vala-code pp-expression: pp-or-expression pp-or-expression: pp-and-expression [ || pp-and-expression ] pp-and-expression: pp-binary-expression [ && pp-binary-expression ] pp-binary-expression: pp-equality-expression pp-inequality-expression pp-equality-expression: pp-unary-expression [ ==pp-unary-expression ] pp-inequality-expression: pp-unary-expression [ !=pp-unary-expression ] pp-unary-expression: pp-negation-expression pp-primary-expression pp-negation-expression: ! pp-unary-expression pp-primary-expression: pp-symbol ( pp-expression ) true false pp-symbol: identifier The semantics of the preprocessor are very simple: if the condition is true then the Vala code surrounded by the preprocessor will be parsed, otherwise it will be ignored. A symbol evaluates to true if it is defined at compile-time. If a symbol in a preprocessor directive is not defined, it evaluates to false.