2011-11-11 5 views
1

で私は私がこれを見つけた私のPC &にインストールされたプログラムのヘッダファイルに行われ、いくつかのコードを見ていた:の#define(CLASS)C++

# define A(CLASS)             \ 
B(CLASS)                \ 
void    *D(const C*to); 

誰もが、これは何を意味するのか私に言うことができますか? &のスラッシュとは何ですか?これはすべて1行で書かれていますか? (CLASS)はここで何を意味しますか? &なぜスペースがあまりにも大きいのですか?

答えて

2

バックスラッシュは、改行を「保護」するために、ファイル内を読むときにプリプロセッサーが\と改行の両方を捨てて、1つの論理行に配置します。 (。コンパイラはあまりにもまともなエラーメッセージを生成することができますので、まあ、それはまた#lineマークアップを発します)

誰かがレイアウトはこれ以上読みやすいと考えた:

#define A(CLASS) B(CLASS) void *D(const C*to); 

あなたがそのBDを想像した場合、そしてCがおそらくファイルに何か他のものに置き換えられ、それが出力に次のようにビットを見てみましょう:

Monkey(Simian) void *Bananas(const sticks *to); 

、彼らが書いたようにそれは、彼らに多くの意味を成している必要があります私はそれが改善されているか分からない(と私はスタイルを嫌いだと思う)

Monkey(Simian) 
void   *Bananas(const sticks *to); 

、うまくいけば、それは今理にかなって:マクロ、代わりにそれはこのように「見る」こと。

+0

ありがとうございました。私の質問にコメントとして答えてもらえますか? 有用な –

+0

'Monkey(Simian)'は、新しいクラス 'Monkey'を' Simian'のサブクラスに宣言しています。 'A'、' B'、 'C'、' D'、 'CLASS'の全てがプロジェクト。 – sarnold

5

\は、2つの異なる行にステートメントを追加するだけです。これは、単に読みやすくするために、おそらく行われ

#define A(CLASS) B(CLASS) void *D(const C*to); 

: 同じ不可欠です。

+0

thats okですが、(CLASS)については、C++のクラスで何かする必要がありますか? &私たちは通常、#define pi 3.142やそのようなことをします...ここにはさらに多くの用語があります。 A B C Dの関係は何ですか? –

2

スラッシュ\は、マクロの定義が次の行に続くことを意味します。 \がない場合、デフォルトのマクロは#defineが書き込まれた1行だけを考慮しているため、次の行はマクロの一部と見なされません。

これは、多くの人が英語を使用して(特にオンラインフォーラムで)しばしば継続を示すためによく使われる[contd...]に類似しています。

+0

ありがとう男:) しかし、あなたはそれが何をするのかを教えてもらえますか? 私は#define pi 3.142のようなものしか知りません! :( –

+0

@CAD_coding:ABCDが何であるかを知らなくても、私の言うことはできません。 – Nawaz