为什么以下代码会抛出错误?
const int a = 5;
int b[a]={1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
而且当我尝试编译没有"const"关键字的上述代码时,我得到了同样的错误:
int a = 5;
int b[a]={1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我在这里做的错误是什么?
还有另一个问题:什么时候常量被代码中的实际值替换,即如果我声明一个变量说:const int x = 5; 我知道在RAM中没有为变量x分配内存,但是ROM中的常量变量区域保持值5,并且x在代码中出现x的地方简单地替换为值5.但这什么时候发生的?编译时间?启动时间?预处理时间?
PS:我说的是嵌入式C(在微控制器上运行等),而不是在桌面上运行的C. 因此嵌入式系统必然会有一个ROM(Flash,EEPROM ......).那会发生什么?
这可以工作:
const int size = 2;
int array[size] = {0};
Run Code Online (Sandbox Code Playgroud)这有编译错误:
int a = 2;
const int size = a;
int array[size] = {0};
Run Code Online (Sandbox Code Playgroud)为什么?
在C中,const不允许使用变量声明数组大小,即使它是变量.例如:这无法在C中编译:
#include <stdio.h>
const int SIZE = 2;
int a[SIZE];
int main()
{
a[0] = 1;
a[1] = 2;
printf("%i, %i", a[0], a[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$gcc -o main *.c
main.c:5:5: error: variably modified ‘a’ at file scope
int a[SIZE];
^
Run Code Online (Sandbox Code Playgroud)
但是,在C++中,它运行得很好.
在C++中运行上面的代码.
输出:
$g++ -o main *.cpp
$main
1, 2
Run Code Online (Sandbox Code Playgroud)
要使其在C中运行,必须使用#define而不是变量.即:
这在C或C++中运行得很好:
#include <stdio.h>
#define SIZE 2
// const int SIZE = 2;
int a[SIZE];
int main()
{
a[0] = 1;
a[1] = …Run Code Online (Sandbox Code Playgroud)