将`log10(2)`的结果赋给常量

Gar*_*ain 1 c constants function return-type return-value

我想将结果赋给log10(2)常量.

我做到了

const float f = log10(2);
Run Code Online (Sandbox Code Playgroud)

它告诉我们Initializer element is not a constant expression.我还定义了一个新功能

const float Log10(float f) {
    return (const float)log10(f);
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨(为什么不呢?我也在使用log10函数)Type qualifiers are ignored on function's return type.这是否意味着没有可以返回常量的函数?那我怎么能做我想做的事呢?

编辑:

由于有些人有疑问,我包含了math.h头文件并将其链接-lm,但我-pedantic在gcc中使用该选项,并且它不接受它.

小智 6

假设f在全球范围内声明.

与C++不同,C在初始化全局变量时不允许使用运行时表达式.所有表达式必须在编译时可计算.

因此

const float f = log10(2);
Run Code Online (Sandbox Code Playgroud)

不是有效的C,而

const float f = 0.30102999566;
Run Code Online (Sandbox Code Playgroud)

已验证.

来自C参考:

初始化静态或线程本地存储持续时间的对象时,初始化程序中的每个表达式都必须是常量表达式或字符串文字.