是否可以定义const值,而不是要求用户输入?

时间:2012-05-04 11:10:40

标签: c macros scanf c-preprocessor

是否可以在C中定义一个const值:

#define N;

并且要求用户输入正在使用scanf()?

若然,怎么样?

4 个答案:

答案 0 :(得分:3)

#define ed值不是正常的const。它们由预处理器计算/转换,因此您在编译时会丢失它们,并且肯定无法在运行时更改它们。

请注意,此类#define的语法为#define N 5而不是#define N;

答案 1 :(得分:2)

预处理程序宏定义的扩展在预处理阶段运行时设置,甚至在大量编译之前。

例如,如果您执行#define N 5,那么N将始终为5,而不是其他任何内容。

如果您执行#define N my_global_integer,则N始终为my_global_integer,绝不会是其他任何内容。

所以我想你可以做到:

#include <stdio.h>

#define N my_global_integer
int my_global_integer;

int main() {
    scanf("%d", &N);
    printf("%d\n", N);
}

预处理器宏N是常量,但它最终扩展到的变量不是。我通常不会建议它,但如果这个问题是一个谜题,那么这可能就是答案。

答案 2 :(得分:1)

没有

在实际编译器甚至看到源代码之前,您使用define定义的内容将由预处理器进行文本替换。

此外,常数不应该改变,这应该是关于你的想法的非常明显的红旗。

答案 3 :(得分:0)

不,因为#define在编译时使用preprocessor插入到代码中。它们不能在运行时更改。