質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

8690閲覧

sys/time.h について

YUKI007BKB

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/06/13 03:29

C言語,C++のヘッダーファイルの場所について質問です.

プログラムの勉強をしている時に,<time.h> と <sys/time.h> が include されているものがあったので,この2つのヘッダーファイルが自分のコンピュータのどこのディレクトリにあるのか調べようと思いました.

すると,<time.h> は見つかったのですが,<sys/time.h> は見つかりませんでした.
しかし,実際に <sys/time.h> include して gettimeof()関数は使用できました.

<sys/time.h> はファイルとしは存在しないものなのでしょうか?

質問が曖昧で申し訳ありません.
わかる方いらっしゃいましたら,<sys/time.h> について教えていただけると助かります.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohhoy

2019/06/13 03:40

利用されているOSは何でしょうか?正確なOS名とバージョンを質問文中に追記されたほうがよいですね。
YUKI007BKB

2019/06/13 04:10

説明不足で申し訳ありません, OS名 :Ubuntu バージョン名:16.04.6 LTS (Xenial Xerus) これで合っているでしょうか?
guest

回答3

0

includeできているヘッダーの場所を調べるというとき、お使いのコンパイラーによっては割と簡単に調べらるかも知れません。

例えばgcc(GNU C Compiler)を使っているなら

-Eオプション

bash

1$ gcc -E -c ss.c

などとするとincludeしたヘッダーが実際にどこから読み込まれたか標準出力に出てくるのでそれをlessなどで眺めながら探せそうです。

Cのソースファイル

C

1#include <sys/time.h>

gcc -Eでコンパイルしたときの標準出力の結果

# 1 "ss.c" # 1 "<組み込み>" # 1 "<コマンドライン>" # 1 "ss.c" # 1 "/usr/include/sys/time.h" 1 3 4 <==これ # 42 "/usr/include/sys/time.h" 3 4 # 1 "/usr/include/_ansi.h" 1 3 4 # 10 "/usr/include/_ansi.h" 3 4 ...

本来このオプションはプリプロセッサーを通じてソースファイルの内容が実際にどのように展開されるかを確認するためにあるのだと思いますが、ヘッダーの場所もたまたま出てるので使ってもよい気がしました。

追記: asmさんにご指摘いただいたようにgccだと-Hの方がずっと見やすいです。-Hですとヘッダーの場所がどこかとヘッダーの依存関係が視覚的にわかりやすく出てきます。

bash

1$ gcc -H -c ss.c 2. /usr/include/sys/time.h 3.. /usr/include/_ansi.h 4... /usr/include/newlib.h 5.... /usr/include/_newlib_version.h 6... /usr/include/sys/config.h 7以下省略

そういえばmakefileのヘッダーの依存関係を自動生成する方法があったと思い、も少し調べてみると-Mオプションなんかもいいと思いました。

bash

1$ gcc -M ss.c 2ss.o: ss.c /usr/include/sys/time.h /usr/include/_ansi.h \ 3 /usr/include/newlib.h /usr/include/_newlib_version.h \ 4 /usr/include/sys/config.h /usr/include/machine/ieeefp.h \ 5以下省略

こちらはmakeのための依存行をもろに出すものですが-Hと同様どこにヘッダーがあるかそのものを出力してくれます。自動的に依存関係を考慮するようなmakefileをほとんど書いたことがないので-Mがすぐに出てきませんでした。また-Hの方は全然知りませんでした(^^;

ご指摘ありがとうございました。>asmさん

-vオプション

bash

1$ gcc -v -c ss.c 2... 3#include <...> の探索はここから始まります: 4 /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/include 5 /usr/include 6 /usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../lib/../include/w32api 7探索リストの終わりです。 8...

のように様々なコンパイラーの情報とともにシステムヘッダーがどのディレクトリーから探されるかも表示されるのでfindなどを使うと見つけやすいと思います。g++でも同様のオプションがあります。

ただ特定のヘッダの場所を調べるなら-Eの方がよさそうです。


なお、上の例はWindows 10にインストールしたcygwinでの実行例なので他の環境のものとは違っているでしょうが、gccをお使いならどの環境でも同様の手順で調べられるのではないかと思います。

gcc/g++以外だとわかりませんが、それなりのオプションがあるような気がするのでmanやリファレンスなどを頼りに調べてみてはいかがでしょう?

投稿2019/06/13 04:34

編集2019/06/13 12:31
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asm

2019/06/13 11:31

-Eよりは-Hの方がよいように思います。
guest

0

すると,<time.h> は見つかったのですが,<sys/time.h> は見つかりませんでした.

time.hのあるディレクトリ(おそらく/usr/include)に、sysというディレクトリがあります。その中に、time.hがあります。それが、sys/time.hです。

投稿2019/06/13 12:11

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

<sys/time.h> は見つかりませんでした.

<sys/time.h>ANSI Cで定義されていないヘッダーファイルなので、ないこともありえます(もちろんその環境では、<sys/time.h>を使ったコードはそのままでは動きません)。

とはいえ、<sys/time.h>はPOSIXで定義されていますので、LinuxやmacOSなどUnix系の環境では通常存在します。

投稿2019/06/13 03:56

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問