いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

コマンドラインでC言語のヘッダーファイルに定義されてるdefineの値を調べる (echo, gcc, -E, -dM, grep)

関連記事

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>' って文字列をファイル名だと勘違いしちゃうからです。なので標準入力から入れてあげるのが大事。

参考情報


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。