タグ

ブックマーク / zenn.dev/kaityo256 (2)

  • C/C++の配列と糖衣構文

    void func1(int a[2][3]) { } void func2(int (&a)[2][3]) { } 配列とポインタと糖衣構文 度々話題になりますが、C/C++言語におけるa[1]のような配列表記は*(a+1)の糖衣構文となっています。 こんな配列宣言があったとします。

    C/C++の配列と糖衣構文
  • 関数の定義位置により結果が変わるコード

    はじめに 少し前、こんなポストをしました。 これは、C言語において、関数の宣言よりも前に関数呼び出しがあり、かつ引数の型が異なる場合、結果が想定の逆になってしまう、というものです。 この現象の質は、暗黙のプロトタイプ宣言とABIにあり、以下の記事で説明は尽きています。 Cの可変長引数とABIの奇妙な関係 ですが、先のポストへの反応を見ていると、いまいち何が起きているかが伝わっていないようだったので、簡単に説明しようと思います。 以下、使用コンパイラはGCC 9.3.0、環境はWSL上のUbuntu 20.04です。 現象 まず、この現象はprintf関数が質ではありません。それを見るため、以下のようなコードを書いてみましょう。

    関数の定義位置により結果が変わるコード
  • 1