我想替换指令
#define MAX_LINE 15
具有可变值。
例如行为,如果某物(文本)包含 15 行或更多行 #define MAX_LINE 返回 15 否则如果文本包含少于 15 行 #define MAX_LINE 返回行数。
for( i = 0; i < MAX_LINE; i++ ) {
/* print lines in expandable menu window */
}
这可能吗?
我想替换指令
#define MAX_LINE 15
具有可变值。
例如行为,如果某物(文本)包含 15 行或更多行 #define MAX_LINE 返回 15 否则如果文本包含少于 15 行 #define MAX_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
s 只需用一些其他文本替换一些文本。例如,您可以使用这个:
#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
。