为什么以下代码会抛出错误?
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 ......).那会发生什么?
我有一些像这样的代码:
static int a = 6;
static int b = 3;
static int Hello[a][b] =
{
{ 1,2,3},
{ 1,2,3},
{ 1,2,3},
{ 1,2,3},
{ 1,2,3},
{ 1,2,3}
};
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时,它说错误:
在文件范围内可变地修改了"Hello"
怎么会发生这种情况?我该怎么办呢?
我使用以下代码.
const int X_ORIGIN = 1233086;
const int Y_ORIGIN = -4728071;
const int Z_ORIGIN = 4085704;
const int xyzOrigin[NUM_DIMENSIONS] = {X_ORIGIN, Y_ORIGIN, Z_ORIGIN};
Run Code Online (Sandbox Code Playgroud)
当我编译它时,GCC给我以下错误.
Transformations.h:16:1:错误:初始化元素不是常量
那是什么意思?我该如何修复我的代码?
我发现了一个有趣的事实,我不明白它是如何工作的.
以下代码完美无缺.
#include <stdio.h>
int main(){
const int size = 10;
int sampleArray[size];
typedef char String [size];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,我试图只使用具有全局范围的常量变量,并且它仍然很好.
#include <stdio.h>
const int size = 10;
int main(){
int sampleArray[size];
typedef char String [size];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将数组的范围也改为全局,我得到以下结果:
错误:在文件范围内修改了'sampleArray'
#include <stdio.h>
const int size = 10;
int sampleArray[size];
typedef char String [size];
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我没有得到它!如果我将ex替换为const变量.以#define它会好起来为好.
我知道#define变量是预处理的,据我所知,const变量只是只读的.但究竟什么才能成为全球范围的?
我不明白第三段代码有什么问题,如果第二段代码还可以.