是否可以在C中定义一个const值:
#define N;
并且要求用户输入正在使用scanf()?
若然,怎么样?
答案 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插入到代码中。它们不能在运行时更改。