質問
関数プロトタイプとタイプ定義が与えられます:
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
.
所属していません StackOverflow