我目前正在將一些Unix代碼移植到Windows中,並遇到了根據Visual Studio(2010或2012)無效語法的條件運算符的相當奇怪的用法。對條件運算符的奇怪使用
複製和粘貼不加修飾:
filename = filename ? : h->filename;
沒有條件!我假設它是對空字符串(const char*
類型)或空&空的檢查,因爲我想不出任何其他的東西。
以前有人看過這個嗎?謝謝。
我目前正在將一些Unix代碼移植到Windows中,並遇到了根據Visual Studio(2010或2012)無效語法的條件運算符的相當奇怪的用法。對條件運算符的奇怪使用
複製和粘貼不加修飾:
filename = filename ? : h->filename;
沒有條件!我假設它是對空字符串(const char*
類型)或空&空的檢查,因爲我想不出任何其他的東西。
以前有人看過這個嗎?謝謝。
這是一個gcc擴展。
x = a ? : b;
是幾乎相同
x = a ? a : b;
除了事實a
只計算一次,這是有用的,如果a
具有任何副作用或是評價昂貴。
給定的代碼在此特定上下文類似於下面的代碼,
if (!filename) {
filename = h->filename;
}
另外請注意,在這個例子中的文件名和H->文件名是兩個不同的變量。 filename是一個普通變量,h-> filename是結構的成員變量。
或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
謝謝大家的一個很好的答案:) – niemiro 2013-03-23 08:33:21