簡體   English   中英

GCC/Clang 中這個奇怪的表達是什么?

[英]What is this strange expression in GCC/Clang?

我最近注意到GCC/Clang中有一個奇怪的有效C/C++表達式,這是我以前從未見過的。 這是C++中的示例,但類似的表達式也適用於C

int main(){
    int z = 5;
    auto x = ({z > 3 ? 3 : 2;}); // <-- expression
    std::cout << x;
}

它的作用是顯而易見的,但我想知道它叫什么。 由於它在MSVC中不值得,我猜它是一個非標准擴展。 但是有什么東西也適用於MSVC嗎? 特別是在C中?

它稱為語句 expr ,用於 GCC。 您的表達式({z > 3? 3: 2;})可以翻譯為

if (z > 3) {x = 3;} else {x = 2;}

從文檔:

括在括號中的復合語句可能會在 GNU C 中顯示為表達式。 這允許您在表達式中使用循環、開關和局部變量。

換句話說,它提供了將復合語句放入表達式 position 的能力。

相關帖子:

它被稱為條件運算符。 返回將取決於條件是真還是假。

但在這種情況下: auto x = ({z > 3? 3: 2;}); // <-- 表達式

如果 Z 大於 3,則返回 3,否則返回 2。

基本語法:Expression1? 表達式2:表達式3;

暫無
暫無

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

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