我對 C 中的三元條件有疑問。如何在三元條件中執行 if-else 陳述句?
if (argc <= 1) {
printf("Something");
printf("Something");
func(NULL);
} else {
for (int i = 1; i < argc; i ) {
fun2(argv[i]);
}
}
uj5u.com熱心網友回復:
由于三元的引數是運算式,而回圈不是運算式,所以不能將列印回圈直接放在三元中。
但是函式呼叫是一個運算式,因此您可以呼叫一個將引數列印到三元的函式。
int print_args(int argc, char *argv[]) {
for (int i = 1; i < argc; i ) {
fun2(argv[i]);
}
}
argc <= 1 ?
(printf("Something"), printf("Something"), func(NULL)) :
print_args(argc, argv);
uj5u.com熱心網友回復:
如另一個答案所述,您不能使用標準 C 來做到這一點。但是有一些編譯器擴展可以使它成為可能。GCC有一個“陳述句運算式”擴展,允許大括號封閉的塊將值作為運算式回傳,這使得在條件構造中使用它成為可能。所以你的例子是轉換幾乎是直截了當的:
(argc <= 1) ? ({
printf("Something");
printf("Something");
func(NULL);
}) : ({
for (int i = 1; i < argc; i ) {
fun2(argv[i]);
}});
或者對于那些想要一個完全可編譯的例子的人:
#include <stdio.h>
void func(void *p) {}
void fun2(void *p) {}
int main(int argc, char**argv) {
(argc <= 1) ? ({
printf("Something");
printf("Something");
func(NULL);
}) : ({
for (int i = 1; i < argc; i ) {
fun2(argv[i]);
}});
return 0;
}
注意:您可以做到這一點并不意味著您應該這樣做。三元條件往往比你的傳統if/else陳述句更難讀,過度復雜化它們根本無濟于事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418551.html
標籤:
