2013-03-23 65 views
1

我目前正在將一些Unix代碼移植到Windows中,並遇到了根據Visual Studio(2010或2012)無效語法的條件運算符的相當奇怪的用法。對條件運算符的奇怪使用

複製和粘貼不加修飾:

filename = filename ? : h->filename; 

沒有條件!我假設它是對空字符串(const char*類型)或空&空的檢查,因爲我想不出任何其他的東西。

以前有人看過這個嗎?謝謝。

+0

或http://stackoverflow.com/questions/2806255/why-would-you-use-the-ternary-operator-without-assigning-a-value-for-the-true:*「這是允許的GNU作爲C的一個不起眼的擴展名「* – 2013-03-23 08:20:50

+0

謝謝大家的一個很好的答案:) – niemiro 2013-03-23 08:33:21

回答

2

這是一個gcc擴展。

x = a ? : b; 

幾乎相同

x = a ? a : b; 

除了事實a只計算一次,這是有用的,如果a具有任何副作用或是評價昂貴。

2

給定的代碼在此特定上下文類似於下面的代碼,

if (!filename) { 
    filename = h->filename; 
} 

另外請注意,在這個例子中的文件名和H->文件名是兩個不同的變量。 filename是一個普通變量,h-> filename是結構的成員變量。