これは私が0引数(argc-1
がfalse
に評価すること)で3進C演算子は空の第1ブランチをどのように解釈しますか?どうして?
- それを実行した場合、それは
42
を印刷し#include <stdio.h> int main(int argc, char **argv){ printf("%d\n", argc-1?:42); return 0; }
(4.9.2)のコンパイルと
gcc -Wall
を使用して警告なしに実行するように思えます。 - (n> = 1 args(
argc-1
をtrue
と評価)とすると、n-1を出力します。
この場合、x?:y
はx?1:y
に相当します。この標準、予想される行動、または単にGCCの奇妙なことはありますか?
あまりにも遅すぎると、これは欺瞞であることがわかります。私は周りを探しました、正直。 – tucuxi
"を1以上(argc-1をtrueにする)にすると、1"を出力します。_いいえ、それは '(argc-1)'を出力します。 4つの引数を指定すると4が出力され、42の引数を指定すると42が出力されます。 '(argc-1)'は 'int'であるためブール値ではありません。 –
修正済み - ありがとうございます。 – tucuxi