C の隠れた機能

GCC コンパイラのトリックですが、コンパイラに分岐指示のヒントを与えることができます (Linux カーネルでは一般的です)

#define likely(x)       __builtin_expect((x),1)
#define unlikely(x)     __builtin_expect((x),0)

参照:http://kerneltrap.org/node/4705

これについて私が気に入っているのは、一部の関数に表現力を追加することです.

void foo(int arg)
{
     if (unlikely(arg == 0)) {
           do_this();
           return;
     }
     do_that();
     ...
}

int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t

これらは標準のオプション項目ですが、人々が絶えず再定義しているため、隠された機能でなければなりません。私が取り組んできた (そして今もなお) あるコード ベースには、すべて異なる識別子を持つ複数の再定義があります。ほとんどの場合、プリプロセッサ マクロを使用します:

#define INT16 short
#define INT32  long

等々。髪を伸ばしたくなる。 おかしな標準の整数型定義を使用するだけです!


コンマ演算子は広く使用されていません。確かに悪用される可能性はありますが、非常に便利な場合もあります。この使用法は最も一般的なものです:

for (int i=0; i<10; i++, doSomethingElse())
{
  /* whatever */
}

ただし、この演算子はどこでも使用できます。観察:

int j = (printf("Assigning variable j\n"), getValueFromSomewhere());

各ステートメントが評価されますが、式の値は最後に評価されたステートメントの値になります。