C言語で次のように定義する方法があるかどうか疑問に思いました#define
。
#define something #define
something a 42
something b 42
C言語で次のように定義する方法があるかどうか疑問に思いました#define
。
#define something #define
something a 42
something b 42
いいえ、Cではできません。別のマクロでマクロを定義することはできません。
C標準から:
6.10.3.4再スキャンとさらなる交換
3結果として得られる完全にマクロ置換された前処理トークンシーケンスは、前処理ディレクティブに似ていても処理されませんが、その中のすべてのプラグマ単項演算子式は、以下の6.10.9で指定されているように処理されます。
いいえ、ありません。マクロの展開によってプリプロセッサディレクティブのように見えるものが生成された場合、それは1つとして処理されず、#
適切なコンパイラによって認識されるソースコードにが残り#
、予期しないトークンであることに異議を唱えます(構文エラー) 。
6.10.3.4再スキャンとさらなる交換
¶3結果として完全にマクロ置換された前処理トークンシーケンスは、たとえそれが類似していても前処理ディレクティブとして処理されませんが、その中のすべてのプラグマ単項演算子式は、以下の6.10.9で指定されているように処理されます。
参照される「プラグマ単項演算子」_Pragma()
は、文字列リテラルを受け取る演算子です。
C99の表現は非常に似ており、C89の表現も似てい_Pragma
ますが、C89には存在しなかったため、演算子については言及していません。
C2011標準のドラフトは、OpenStandardWebサイトで見つけることができます。
ワーキングペーパー、委員会会議の「郵送」などとともに。
(JTC1は合同技術委員会1、SC22はプログラミング言語の標準化委員会22、WG14はC標準を担当するワーキンググループ14、 WG21はC ++標準を担当します。)
標準のPDFの独自のパーソナライズされたコピーをANSIから30米ドルで入手できます。私はそれを真面目なCプログラマーにとって必要な投資だと考えています。
いいえ。プリプロセッサは1回のパスしか実行しないため、最終的に、コンパイラに送られるコードには、構文エラーである#defineが含まれます。
他の定義に基づいて何かを定義したい場合は、Cが#ifdef
それを実現するために提供します
お気に入り:-
#define something
#ifdef something
#define a 42
#else
#define b 42
#endif