私が調べた情報のまとめなので間違いがあるかもしれません
経緯
大学のCの授業でゲームを作る最終課題が出されました。
ゲームを作りにあたり、時間を測定する処理が必要になります。
そのため、UnixでもWindowsでも使える時間計測関数のサンプルコードが授業で配布されました。
しかし、そのコード内で使用されている関数 gettimeofday()
が非推奨になっていることを知り、代替の関数を使うように書き換えようとしました。
timespec_get()
を使いたかった
私はmacOS上でプログラミングをしています。また、コンパイラは gcc
を使っていました。
このページによると、C11
で timespec_get()
という関数が追加されたようです。
そこで、 gcc
でコンパイルする際に、 -std=c11
オプションを付ければこの関数を使えるのではないかと考えました。
しかし以下のようなwarningとerrorが表示されてしまいました。
warning: implicit declaration of function 'timespec_get' is invalid in C99 [-Wimplicit-function-declaration] error: use of undeclared identifier 'TIME_UTC'
C11
を指定したのに invalid in C99
はよくわかりませんが、-v
を付けて確認してみると -std=gnu11
オプションが付いてコンパイルされているので、 C11
でコンパイルされているようです。
わからなくなってきたなぁと思いつつ、 implicit declaration of function
の意味を調べてみると、 関数の暗黙の宣言 が問題なようです。
もしやと思い
、 time.h
を見てみると、 timespec_get()
のプロトタイプ宣言がありませんでした。
そりゃあダメじゃん!!
ということで調べてみると以下のページを見つけました。
macOSには timespec_get()
は実装されていないという回答でした。
そういえば最初に挙げたページにも、
C言語標準ではあるが C11(ISO/IEC 9899:2011) という新しい標準で追加されたもののため、 使用できる環境はある程度限られる点に注意していほしい。
と書かれていました。
ということで、 timespec_get()
はmacOSには実装されていなかったというお話でした。