2011-10-31 6 views

答えて

16

は、C言語は#オペレータを持っていないが、前処理(#include#defineを扱うプログラムは)ありません。プリプロセッサシンプルでは、​​文字列"ALPS"#ALPSが入ります。

ただし、この "stringify"演算子は、#defineプリプロセッサディレクティブでのみ使用できます。例えば:

#define MAKE_STRING_OF_IDENTIFIER(x) #x 
char alps[] = MAKE_STRING_OF_IDENTIFIER(ALPS); 

プリプロセッサは、以下に上記の例を変換する:

char alps[] = "ALPS"; 
+2

あなたの答えがより明確になります: '#ALPS'だけでは、"無効な前処理指令 "というエラーが発生します。しかし、 '#define TEST(X)#X'のように使用すると' TEST(ALPS) 'は' 'ALPS ''を出力します。 – wormsparty

+0

つまり、 'char * s =#ALPS'のようなものが意味をなさないでしょうか? – Bleamer

+0

@wormsparty:ありがとう、少し答えを明確にしました。 –

1
#ALPS 

#は、#include#defineように、プリプロセッサディレクティブのために使用されます。また、マクロ定義内でマクロ展開を防ぐために使用することもできます。

1

Cの急激なシンボルがプリプロセッサディレクティブの接頭辞です。

それはオペレータではありません...

0

「#」はC. で演算子ではなく、(コンパイラ前の動作)プリプロセッサは のための能力_ヘッダファイルのインクルードを提供しています。 enter code hereの#include _マクロ展開:**#define foo(x) bar x** _条件付きコンパイル:enum {ALPS, ANDES, HIMALYAS};

**#if DLEVEL > 5 
    #define STACK 200 
#else 
    #define STACK 50 
    #endif 
#endif** 

ALPSを返すものはありません。あなたはちょうど強い整数型(ALPS = 0, ANDES = 1 and HIMALYAS = 2)を定義しましたが、それはこのようなenumreationの名前のないUselesです: enum mountain {ALPS、ANDES、HIMALYAS};

関連する問題