ディレクティブを置き換えたい
#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 */
}
これは可能ですか?
ディレクティブを置き換えたい
#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 */
}
これは可能ですか?
その後、交換してください
int MAX_LINE = 15;
また
int max_line = 15;
#define MAX_LINE max_line
MAX_LINEこれは定数ではなくなることを覚えておいてください。つまり、定数が必要な場所では使用できなくなります。
基本的に、変数値になると、プリプロセッサとは何の関係もなくなります。今は普通の変数です。変数にし、適切な名前を付けて、忘れてください#define。
#define■一部のテキストを他のテキストに置き換えるだけです。たとえば、次のように使用できます。
#define MAX_LINES ((num_lines > 15) ? 15 : num_lines)
MAX_LINES次に、いくつかのステートメントで以前と同じように使用できます。ただし、すべての状況で機能するとは限りません。次のようなコードがあった可能性があります。
const char *lines[MAX_LINES];
古いものでは#define、MAX_LINESは15だったので、これに拡張されました。
const char *lines[15];
これは、標準に準拠したコンパイラで有効です。ただし、新しいを使用したとしましょう#define。展開すると、次のようになります。
const char *lines[((num_lines > 15) ? 15 : num_lines)];
それがグローバル宣言だったとすると、それは無効になります。単なるローカル宣言であっても、コンパイラが可変長配列をサポートしている場合にのみ有効です。
もし私があなたなら、私はあなたがやろうとしていることを何でも手に入れようとし#defineますMAX_LINES。そうすればより明確になり、を使用することが無効になる場所がより明確になりますMAX_LINES。