我想将 log10(2)
的结果赋给一个常量。
我做了
const float f = log10(2);
它告诉我们 Initializer 元素不是常量表达式
。我还定义了一个新函数
const float Log10(float f) {
return (const float)log10(f);
}
但是编译器提示(为什么不呢?我也在使用 log10
函数)类型限定符在函数的返回类型上被忽略
。这是否意味着没有可以返回常量的函数?那我怎样才能做我想做的事呢?
编辑:
由于有些人有疑问,我包含了 math.h
头文件并将其与 -lm
链接,但我使用的是 -pedantic
gcc 中的选项,它不接受它。
最佳答案
假设 f
是在全局级别声明的。
与 C++ 不同,C 不允许在初始化全局变量时使用运行时表达式。所有表达式在编译时都必须是可计算的。
因此
const float f = log10(2);
不是有效的 C,而
const float f = 0.30102999566;
有效。
来自 C Reference :
When initializing an object of static or thread-local storage duration, every expression in the initializer must be a constant expression or string literal.
关于c - 将 `log10(2)` 的结果分配给一个常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51447810/