【问题标题】:C: How do I round a global variable?C:如何对全局变量进行舍入?
【发布时间】:2015-06-01 14:24:09
【问题描述】:

我有密码

#include <stdio.h>
#include <math.h>

double x = round(3.2/2.0);

int main()
{
    printf("%f", x);
}

当我尝试编译时,我收到错误 initializer element is not a compile-time constant。如果没有round,它可以顺利编译。

我想将 x 作为全局变量进行舍入。这可能吗?

【问题讨论】:

  • 如果你知道确切的值,(round(3.2 / 2.0) = 2.0),你为什么还要在代码中进行这样的计算呢?而不仅仅是double x = 2.0 // Got this value from round(3.2 / 2.0)?
  • 有趣的是,GCC 只发出警告而不是错误,当使用 __builtin_round 时,它甚至不会这样做。但我猜(也有点希望)非可移植的 GCC-only 代码是不行的。

标签: c compiler-errors global-variables rounding compile-time


【解决方案1】:

在 C 语言中,具有静态存储持续时间的对象只能使用 整数常量表达式 进行初始化。不允许在整型常量表达式中调用任何函数。

您必须找到一种方法来通过整数常量表达式生成您的值。像这样的东西可能会起作用

double x = (int) (3.2 / 2.0 + 0.5);

【讨论】:

  • 注意:这种方法通常有效,除了 1) 仅在 intlong long 或使用的任何整数转换的范围内,2) 仅在正范围内,因为代码在 pre 时应为 - 0.5 -rounded value 为负 3) "+0.5 and cast" 总是向上取整(中途),而round(some_FP) 可能向下取整。
【解决方案2】:

不能在全局范围内调用函数,试试

#include <math.h>

double x;
int main(void) 
 {
    x = round(3.2 / 2.0);
    return 0;
 }

【讨论】:

  • 为什么是1.5 而不是3.2/2.0
  • 我只是用一个随机值来说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多