1

我想替换指令

#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 */
}

这可能吗?

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

#defines 只需用一些其他文本替换一些文本。例如,您可以使用这个:

#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)];

假设这是一个全局声明,那将是无效的。即使它只是一个局部声明,它也只有在编译器支持可变长度数组时才有效。

如果我是你,我会简单地尝试让你想要做的任何事情都能正常工作,而不是使用非常#defineMAX_LINES表达式;这样会更清楚,并且在使用无效的地方会更明显MAX_LINES

于 2013-01-19T02:12:38.410 回答