1

ディレクティブを置き換えたい

#define MAX_LINE 15

変数値付き。

たとえば、動作の例として、何か(text)に15行以上含まれている場合は#define MAX_LINEで15を返し、テキストに含まれている行が15行未満の場合は#defineMAX_LINEで行数を返します。

for( i = 0; i < MAX_LINE; i++ ) {
   /* print lines in expandable menu window */
}

これは可能ですか?

4

2 に答える 2

3

その後、交換してください

int MAX_LINE = 15;

また

int max_line = 15;
#define MAX_LINE max_line

MAX_LINEこれは定数ではなくなることを覚えておいてください。つまり、定数が必要な場所では使用できなくなります。

基本的に、変数値になると、プリプロセッサとは何の関係もなくなります。今は普通の変数です。変数にし、適切な名前を付けて、忘れてください#define

于 2013-01-19T02:13:40.430 に答える
0

#define■一部のテキストを他のテキストに置き換えるだけです。たとえば、次のように使用できます。

#define MAX_LINES ((num_lines > 15) ? 15 : num_lines)

MAX_LINES次に、いくつかのステートメントで以前と同じように使用できます。ただし、すべての状況で機能するとは限りません。次のようなコードがあった可能性があります。

const char *lines[MAX_LINES];

古いものでは#defineMAX_LINESは15だったので、これに拡張されました。

const char *lines[15];

これは、標準に準拠したコンパイラで有効です。ただし、新しいを使用したとしましょう#define。展開すると、次のようになります。

const char *lines[((num_lines > 15) ? 15 : num_lines)];

それがグローバル宣言だったとすると、それは無効になります。単なるローカル宣言であっても、コンパイラが可変長配列をサポートしている場合にのみ有効です。

もし私があなたなら、私はあなたがやろうとしていることを何でも手に入れようとし#defineますMAX_LINES。そうすればより明確になり、を使用することが無効になる場所がより明確になりますMAX_LINES

于 2013-01-19T02:12:38.410 に答える