関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。たまーに使いたいときに忘れているのでここにメモメモ。。。
先日、errno ってスレッドセーフだったっけ?って思って、調べようとしました。
「なんか、コマンドラインで一発で確認出来るやり方あったような・・・」って記憶だけがあって、中々思い出せず(齢ですね・・
以下で確認出来たりします。
$ echo '#include <errno.h>' | gcc -E -dM -std=c99 - | grep errno #define errno (*__errno_location ())
gccのオプションが大事で
-E- プリプロセス処理のみを実行(コンパイルはしない)
-dM- 定義されているマクロの一覧を出力 (
-dがダンプ、-Mがマクロ定義出力)
- 定義されているマクロの一覧を出力 (
となります。
後は、それを echo からヘッダーファイルを渡して、gccに標準入力から食べさせて、grepするという感じです。
ちなみに、echoでパイプせずに、直接指定するとエラーになりますので、ご注意を。
$ gcc -E -dM -std=c99 '#include <errno.h>' | grep errno gcc: warning: #include <errno.h>: linker input file unused because linking not done gcc: error: #include <errno.h>: linker input file not found: そのようなファイルやディレクトリはありません
これは、gccが '#include <errno.h>' って文字列をファイル名だと勘違いしちゃうからです。なので標準入力から入れてあげるのが大事。
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。