相关疑难解决方法(0)

可以使用const变量来声明C中数组的大小吗?

为什么以下代码会抛出错误?

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 ......).那会发生什么?

c arrays const

37
推荐指数
3
解决办法
3万
查看次数

数组初始化在C++中使用const变量

  1. 这可以工作:

    const int size = 2;
    int array[size] = {0}; 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这有编译错误:

    int a = 2;
    const int size = a;
    int array[size] = {0};
    
    Run Code Online (Sandbox Code Playgroud)

为什么?

c++ arrays const

6
推荐指数
2
解决办法
2万
查看次数

在C++中使用变量而不是`#define`指定数组大小是不好的做法吗?(C错误:在文件范围内进行了可变修改)

在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)

在C中运行此代码

输出:

$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)

c c++ arrays compiler-errors static-initialization

0
推荐指数
1
解决办法
225
查看次数

标签 统计

arrays ×3

c ×2

c++ ×2

const ×2

compiler-errors ×1

static-initialization ×1