質問

関数プロトタイプとタイプ定義が与えられます:

int my_function(unsigned short x);
typedef unsigned short blatherskite;

次の状況は標準で定義されています。

int main(int argc, char** argv) {
  int result;
  blatherskite b;

  b=3;
  result = my_function(b);
}

関数プロトタイプを介してタイプ強制を予測可能に取得しますか?

役に立ちましたか?

解決

あなたの質問が、引数の種類とパラメーターが一致するかどうかについての質問である場合、答えはイエスです。 typedef 新しいタイプを導入するのではなく、既存のタイプのエイリアスのみを作成します。変数 b タイプがあります unsigned int, 、パラメーターと同じように b typedef-nameを使用して宣言されます blatherskite.

あなたの例はそれを示すのにそれほど良くありません。すべての積分タイプはC ++で互いに変換可能であるため、(範囲の問題を無視する)コードは、場合でも動作を定義していたでしょう blatherskite 別のタイプ(新しいタイプ)に指定されました。しかし、そうではありません。したがって、これも完全に有効です

void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid

他のヒント

タイプの強制は必要ありません。 Typedefは同じタイプのエイリアスにすぎないので、 unsigned short を取る関数に unsigned short.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top