-1

#define の名前を含む文字列でマクロの値を取得することは可能ですか? または、コードをコンパイルした後、その名前でマクロにアクセスすることは不可能ですか?

私が求めていることを指摘するには:

#define NAME "VALUE"
char string[5];

// I want the content of string to be changeable to access any define
strncpy(string, "NAME", 4);
fprintf(stderr, "%s\n", string);

出力したい: VALUE

編集 MOHAMEDの返信により、この解決策が見つかりました:

#define NAME "VALUE"
char string[5];

strncpy(string, "NAME", 4);

if(strncmp(string, "NAME", 4) == 0) {
    fprintf(stderr, "%s\n", NAME);
}
4

2 に答える 2

3

マクロ名を直接使用する

strncpy(string, NAME, 4);

マクロで定義された文字列の内容は編集できません

マクロはコンパイル段階で評価されます。コンパイラは、2 番目のコード (プリプロセッサ コードと呼ばれます) を生成します。このコードはコンパイラによって生成され、コンパイラはマクロをその内容で置き換えます。

あなたの最初のコードが

#define NAME "VALUE"
char string[5];

strncpy(string, NAME, 4);
fprintf(stderr, "%s\n", string);

コンパイラによって生成されるコードは

char string[5];

strncpy(string, "VALUE", 4);
fprintf(stderr, "%s\n", string);

次のプリプロセッサ コードを表示できます。

gcc -E file.c
于 2013-07-27T19:18:31.433 に答える
2

いいえ、できません。マクロは、C コンパイラ自体がコードを確認する前に、前処理段階で置換テキストに置き換えられます。

于 2013-07-27T19:18:38.390 に答える