
stddef.hっていうのは
処理系に依存する型とマクロの定義。
ptrdiff_t - ポインタ減算の結果の型
size_t - sizeof 演算子の結果の型
wchar_t - ワイド文字型
NULL - 空ポインタ定数マクロ
offsetof - 構造体のフィールドのオフセットを算出するマクロ
という事だと思うんですが(思うんですがというか引用ですが)
size_tとかこのヘッダファイルインクルードしないでも使えますよね??
なんでなのでしょうか・・。
たとえばインクルードなしで
void main(){
size_t i;
}
でコンパイルしても通ります。stddef.hをインクルードしないといけないときはどんなときなんでしょうか?
No.1ベストアンサー
- 回答日時:
デフォルトで上位のヘッダファイルがインクルードされていませんか?
例えば、main.cに自動的に作られたmain.hがインクルードされてませんか?
そして、main.hにstdlib.hか何かをインクルードするように書かれてませんか?
この場合stdlib.hはstddef.hをインクルードしているので、結果的にstddef.hをインクルードする事になります。
本当にソースコードに
void main(){
size_t i;
}
の3行しかありませんか?
で、本当に上記の3行しかないとしたら、最適化により、未使用の変数の宣言が削除されている可能性があります。
未使用の変数は宣言しても意味がないので、最適化により宣言文が削除され
void main(){
}
になっていると思われます。こうなると、未定義の型を使用しても「無かった事」になり、コンパイルが通ってしまいます。
最適化により、宣言文や代入文や参照行が削除されてしまわないよう
extern void sub(size_t i);
void main(){
sub(0);
}
と書いてコンパイルしたらでうでしょうか?多分
extern void sub(size_t i);
でsize_tが未定義のエラーになる筈です。
No.2
- 回答日時:
> size_tとかこのヘッダファイルインクルードしないでも使えますよね??
全くヘッダをインクルードしなくても使える処理系も確かにありますが、少なくとも移植性はありません。
また、<stddef.h>をインクルードしなくても、少なくとも<stdio.h>, <string.h>,<stdlib.h>, <time.h>でもsize_t型が定義されます。
> void main(){
ひとつの可能性としては、mainの定義が間違っているために未定義の動作を引き起こし、コンパイラがパニックになったということも考えられます。
ちなみに、最適化は構文解析よりずっと後に行われるので、コンパイルエラーになるかどうかとは全く関係ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
gcc: incompatible pointer type
-
C++にてtemplateで受け取った任...
-
C言語 extern について
-
const_castのつかいどころを教...
-
C言語 プロトタイプ宣言
-
privateなnamespaceメンバ
-
VisualStudio2005C++の某参考書...
-
VC++でGetKeyboardStateがうま...
-
Arduinoでの圧電スピーカーとタ...
-
【gcc・cygwin】multiple defin...
-
既定のコンストラクタがありま...
-
見た目は同じソースなのにエラ...
-
静的でないメンバ関数の呼び出...
-
多重定義が起きている?--lnk20...
-
ArduinoでMouse関数を使用して...
-
戻り値を返す関数の前に(void)...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
c languageで 簡単な質問があ...
-
エクセルで可視セルにのみ値貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
【gcc・cygwin】multiple defin...
-
const_castのつかいどころを教...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
pictureboxの画像を削除するには?
-
Notepad++の関数リスト表示の変...
-
C#でテンキーの操作は可能でし...
-
アドレスを指定して関数を呼び...
-
ウインドウの移動禁止
-
画面上をクリックするとクリッ...
-
C# Controls.Addで動的に配置し...
-
別ソースファイル、同クラス名...
-
DLLの関数呼び出しで引数がある...
-
プログラム作成教えてください...
おすすめ情報