I came across次のコード行は、わかりません。Cの 'switch 0'ステートメントの目的は何ですか?
#define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0)
switch (0)
の一部は何ですか? 0
がfalse
に相当すると仮定すると、switch文を入力しないという意味ですか?
case (a)
の行についても、未知数a
をケースとしてどのように指定できますか?
これはすべて、「a」がコンパイル時定数であることを確認することです。 'b'は使用されていません。それが展開するコードは、実際に何もせずに落ちるだけです。 'switch(0)'は 'switch(100)'や他の値と変わらない。それは 'case 0'に分岐し、そこから実行が続きます。 'a'は変数ではありません。マクロに渡すものは何でも構いません。それは定数でなければなりません。変数を渡すと、コンパイル時にエラーが発生します。 –
['static_assert'](https://stackoverflow.com/q/1647895/995714)は、ここでの意図と使用方法が異なりますが、その名前が良い選択ではありませんが、いくつかのヒントを与えることができます –
標準の実装としての欠陥'static_assert'は関数の外では動作しないので –