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参考:
初始化静态或线程本地存储持续时间的对象时,初始化程序中的每个表达式都必须是常量表达式或字符串文字.