0

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

#define N;

而不是要求用户输入是使用scanf()?

如果是这样,如何?

4

4 回答 4

3

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

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

于 2012-05-04T11:12:45.693 回答
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是常量,但它最终扩展为的变量不是。我通常不会建议它,但如果这个问题是一个谜,那么这可能就是答案。

于 2012-05-04T11:16:51.197 回答
1

不。

在实际编译器甚至看到源代码之前,您定义的内容define会被预处理器以文本方式替换。

此外,常量不应该改变,这对于你的想法来说应该是非常明显的危险信号。

于 2012-05-04T11:12:37.627 回答
0

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

于 2012-05-04T11:12:25.970 回答