c - 将 `log10(2)` 的结果分配给一个常量

标签 c function constants return-value return-type

我想将 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/

相关文章:

c - 保证 uint8_t 小于 9

function - 编写一个函数来删除对象(如果存在)

programming-languages - 是否有任何编程语言的函数的变量参数不在末尾?

C 存储大小不是常量...为什么?

带有内联函数的 const 参数

c - 重新实现库函数作为其他语言的实践

c - string.h的strcmp和我自己实现的strcmp的区别

c - 使用emacs获取函数原型(prototype)

c++ - vector - 当元素有 const 成员时交换两个元素

c - 以太网数据包中的 MAC 地址与 TCP/IP 数据包有何关联?