![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) マクロでコピーすると数式が表示される 1 2022/09/09 20:21
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
C++にてtemplateで受け取った任...
-
戻り値を返す関数の前に(void)...
-
プログラミング教えてください
-
画面上をクリックするとクリッ...
-
gcc: incompatible pointer type
-
多重定義が起きている?--lnk20...
-
[Visual C++ 6.0] コンパイル(...
-
【gcc・cygwin】multiple defin...
-
int main()、void main()、void...
-
H8/3052について
-
DLLの関数呼び出しで引数がある...
-
C言語 プロトタイプ宣言
-
ダイアログのOKボタンを押し...
-
静的でないメンバ関数の呼び出...
-
__threadを使うコードで、分割...
-
C# これはどういうことですか?
-
H8/3048、AD/DA変換プログ...
-
コールバック関数とクラスとの...
-
stddef.hって何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
Notepad++の関数リスト表示の変...
-
戻り値を返す関数の前に(void)...
-
ArduinoでMouse関数を使用して...
-
C++にてtemplateで受け取った任...
-
int main()、void main()、void...
-
多重定義が起きている?--lnk20...
-
C# KeyDownイベントでショート...
-
静的でないメンバ関数の呼び出...
-
VC++でGetKeyboardStateがうま...
-
C# Controls.Addで動的に配置し...
-
gcc: incompatible pointer type
-
void*型の配列について
-
const_castのつかいどころを教...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
(void)0 はどんな意味ですか
-
TimerProc コールバック関数を...
-
H8マイコンのシリアル通信につ...
-
DLLの関数呼び出しで引数がある...
おすすめ情報