2014.
04.
28
21:02:48
結論から書けば
です。
それでは詳細を書いていきます。
超久しぶりにC言語でプログラムを組んだのですが、素朴な疑問が出てきました。
と
の違いはなんだべ(--?
今まで決まり文句のように
と書いていたので、あんま深く考えたこと無かったんですよね(--ゞ
思い立ったが吉日です。早速、調べてみました。
ふむふむ(--)
はパスが通ってるところから「hoge.h」を探してくれるそうです。
一方の
は、まずカレントディレクトリを探します。
それで見つからなかったら、パスが通ってるところを探してくれるのだそーな。
早速、実験してみますかね。
まずは空ファイルの「hoge.h」を作って適当なディレクトリに置き、
同じディレクトリ内に以下の内容の「test.c」を置きましたφ(--)
■test.c
コンパイルしてみた結果はこちらφ(--)
おぉ、見事にエラーになりやがったぜい。
「hoge.h」が見つからなかったのね。
次にtest.cの中身を「<hoge.h>」から「"hoge.h"」に変更φ(--)
今度はちゃんとコンパイルが通りました。
カレントディレクトリも探してくれたのですね。
当たり前ですが「<stdio.h>」から「"stdio.h"」に変えても動きます。
これでもきちんとコンパイルが通りましたφ(--)
ふむふむ(--)
でも動きますよっと。
でも参考書とかを見ると、決まり文句のように
と書いてありますよね。
一瞬、何でかなー?と思ったのですが、きっと余計なことをさせないためなんでしょうね。
「""(ダブルクォート)」で囲った場合、まずはカレントディレクトリを探しにいきます。
そして無かった場合、パスが通っているところを探しに行きます。
「stdio.h」とかは普通わざわざカレントディレクトリに置かないですもんね。
「どーせ無いんだから、わざわざ探す必要なかろーが」ということで
「<>(山括弧)」で囲むのが決まり文句になっているのでしょう。
ふむ(--)
てことは、自分で作ったヘッダファイルは「""(ダブルクォート)」囲みもありうるけど、
標準で用意されているヘッダファイルは「<>(山括弧)」の方が良さ気ですね。
微々たる差でしょうが、カレントディレクトリを探す分、余計なお仕事だろうし。
あるいはincludeの書き方は「<>(山括弧)」囲みで統一して、
自前で用意したヘッダファイルにはパスを通すようにした方が無難かな(--?
……まぁ、いいや。
最後にもう一度まとめておきますね。
「""(ダブルクォート)」囲みでincludeすると、カレントディレクトリも探します。
「<>(山括弧)」囲みでincludeすると、カレントディレクトリは探しません。
完了\(--)/
<>(山括弧)→探査パスにカレントディレクトリを含めない
""(ダブルクォート)→探査パスにカレントディレクトリを含める
""(ダブルクォート)→探査パスにカレントディレクトリを含める
です。
それでは詳細を書いていきます。
超久しぶりにC言語でプログラムを組んだのですが、素朴な疑問が出てきました。
#include <hoge.h>
と
#include "hoge.h"
の違いはなんだべ(--?
今まで決まり文句のように
#include <stdio.h>
と書いていたので、あんま深く考えたこと無かったんですよね(--ゞ
思い立ったが吉日です。早速、調べてみました。
ふむふむ(--)
#include <hoge.h>
はパスが通ってるところから「hoge.h」を探してくれるそうです。
一方の
#include "hoge.h"
は、まずカレントディレクトリを探します。
それで見つからなかったら、パスが通ってるところを探してくれるのだそーな。
早速、実験してみますかね。
まずは空ファイルの「hoge.h」を作って適当なディレクトリに置き、
同じディレクトリ内に以下の内容の「test.c」を置きましたφ(--)
■test.c
#include <stdio.h>
#include <hoge.h>
int main(){
printf("Hello World\n");
}
#include <hoge.h>
int main(){
printf("Hello World\n");
}
コンパイルしてみた結果はこちらφ(--)
test.c:2:18: error: hoge.h: No such file or directory
おぉ、見事にエラーになりやがったぜい。
「hoge.h」が見つからなかったのね。
次にtest.cの中身を「<hoge.h>」から「"hoge.h"」に変更φ(--)
#include <stdio.h>
#include "hoge.h"
int main(){
printf("Hello World\n");
}
#include "hoge.h"
int main(){
printf("Hello World\n");
}
今度はちゃんとコンパイルが通りました。
カレントディレクトリも探してくれたのですね。
当たり前ですが「<stdio.h>」から「"stdio.h"」に変えても動きます。
これでもきちんとコンパイルが通りましたφ(--)
#include "stdio.h"
#include "hoge.h"
int main(){
printf("Hello World\n");
}
#include "hoge.h"
int main(){
printf("Hello World\n");
}
ふむふむ(--)
#include "stdio.h"
でも動きますよっと。
でも参考書とかを見ると、決まり文句のように
#include <stdio.h>
と書いてありますよね。
一瞬、何でかなー?と思ったのですが、きっと余計なことをさせないためなんでしょうね。
「""(ダブルクォート)」で囲った場合、まずはカレントディレクトリを探しにいきます。
そして無かった場合、パスが通っているところを探しに行きます。
「stdio.h」とかは普通わざわざカレントディレクトリに置かないですもんね。
「どーせ無いんだから、わざわざ探す必要なかろーが」ということで
「<>(山括弧)」で囲むのが決まり文句になっているのでしょう。
ふむ(--)
てことは、自分で作ったヘッダファイルは「""(ダブルクォート)」囲みもありうるけど、
標準で用意されているヘッダファイルは「<>(山括弧)」の方が良さ気ですね。
微々たる差でしょうが、カレントディレクトリを探す分、余計なお仕事だろうし。
あるいはincludeの書き方は「<>(山括弧)」囲みで統一して、
自前で用意したヘッダファイルにはパスを通すようにした方が無難かな(--?
……まぁ、いいや。
最後にもう一度まとめておきますね。
「""(ダブルクォート)」囲みでincludeすると、カレントディレクトリも探します。
「<>(山括弧)」囲みでincludeすると、カレントディレクトリは探しません。
完了\(--)/