初始化程序必须是常量

int*_*lis 3 c

我正在尝试学习 C,但在以下代码中出现错误。

如果我在体积中使用半径,则会出现错误:error #2069: Initializer must be constant.

#include <stdio.h>
#define PI (3.14)

/* Define radius*/
int radius = 10;
float volume = ( 4.0f / (3.0f * PI * radius) );

int main(void){

return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我用一个实际数字改变半径时,它编译得很好。

#include <stdio.h>
#define PI (3.14)

/* Define radius*/
int radius = 10;
float volume = ( 4.0f / (3.0f * PI * 10) );

int main(void){

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该怎么做才能使第一个版本正常工作?

Alo*_*ave 5

在 C 中,您不能使用非常量表达式初始化全局变量。

C99 标准:第 6.7.8 节:

具有静态存储持续时间的对象的初始值设定项中的所有表达式应为常量表达式或字符串文字。

在您的示例中,volume是具有静态存储持续时间的全局变量,而radius不是常量。因此错误。