2012-03-14 5 views
22

でコンパイル時の#defineの値を示しますこれまでのところ、私は限り持っている:動作しますが、ADEFINEは、文字列が何でない場合は、どのように私はgccの

#define ADEFINE "23" 
#pragma message ("ADEFINE" ADEFINE) 

#define ADEFINE 23 
#pragma message ("ADEFINE" ADEFINE) 

原因:

警告:不正な形式の「の#pragmaメッセージ」、理想的には私は未定義を含む任意の値に対処できるようにしたいと思い

を無視しました。

答えて

22

が文字列でないマクロを表示するには、stringify the macro

#define STRINGIFY(s) XSTRINGIFY(s) 
#define XSTRINGIFY(s) #s 

#define ADEFINE 23 
#pragma message ("ADEFINE=" STRINGIFY(ADEFINE)) 

boostが必要な場合はboost stringizeを使用してください:

#include <boost/preprocessor/stringize.hpp> 
#define ADEFINE 23 
#pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE)) 
+0

私はクライアントがそれを依存関係として追加してもらえないとは思っていませんが、それは存在証明のようです。おそらく私は行く必要がありますし、stringize.hppを見て –

+4

@JohnLawrenceAspden私はどのようにブースト(または他のライブラリ)なしでそれを行うと答えを更新しました。 – rob05c

6

私はこれがあなたの望むことをするのかどうかはわかりませんが、時にはマクロの問題をデバッグすることだけに興味がある場合(つまり、コンパイルごとにメッセージに表示する必要はありません)あなたのために働くかもしれません。 gccの-E -dDオプションを使用して、#defineディレクティブを前処理出力とともにダンプします。 grepを通じてのみの行を参照するには、パイプは、あなたが欲しい:

// test.c 
#include <stdlib.h> 
#include <stdio.h> 
#define ADEFINE "23" 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
#undef ADEFINE 
#define ADEFINE 42 
    return 0; 
} 

コマンドgcc -E -dD -c test.c | grep ADEFINEショー:

#define ADEFINE "23" 
#undef ADEFINE 
#define ADEFINE 42