C90規格(-std=c90)だと、double myfunc( int i, struct hoge* g ) があるとき、 この関数を前方宣言しないまま使うと、コンパイラは int myfunc(int i, ...) のような int型を返す、可変引数の関数として扱われるようで、警告やエラーは出さない。 C99規格では警告してくれる。 myfunc(int i, ...)を myfunc( int i, struct hoge* g )と思って作っていると、 実行結果は実に不可解な結果を与える。
C99言語規格 | LP64データモデル | LLP64データモデル | |
char | 1byte以上、int以下 | -- | -- |
int | 2byte以上 | 4byte | 4byte |
long | 4byte以上、long long以下 | 8byte | 4byte |
long long | 8byte以上 | -- | -- |
ポインタ | -- | 8byte | 8byte |
実装例 | -- | Linuxなど | Windowsなど |
ref. [1] C++言語でのint型とlong型とlong long型の違いについて [2] cppreference.com 基本型