【问题标题】:how to eliminate: [Warning] converting to `int' from `double'如何消除:[警告] 从 `double' 转换为 `int'
【发布时间】:2011-06-07 15:25:27
【问题描述】:

我有以下代码,其中包含一个带有数据的结构数组来进行一些计算。当我编译代码时,我收到消息[Warning] converting to 'int' from 'double'。我想用代码解决这个问题,但我不确定问题出在哪里。我不确定这个警告是否太大了,但我认为这种转换也可能导致我的计算出现一些差异。

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

int main()
{ 

int i,aplha[90],beta[90];
double gamma[90],delta[90],epsilon[90],zeta[90];

  struct wmm
       {
        int   alpha;
        int   beta;
        double gamma;
        double delta;
        double epsilon;
        double zeta;
       }book[]={
  {1, 0, -29496.6,        0.0,      11.6,       0.0},
  {1, 1,  -1586.3,     4944.4,      16.5,     -25.9},
  {2, 0,  -2396.6,        0.0,     -12.1,       0.0},
  {2, 1,   3026.1,    -2707.7,      -4.4,     -22.5},
  {2, 2,   1668.6,     -576.1,       1.9,     -11.8},
  {3, 0,   1340.1,        0.0,       0.4,       0.0},
  {3, 1,  -2326.2,     -160.2,      -4.1,       7.3},
  {3, 2,   1231.9,      251.9,      -2.9,      -3.9},
  {3, 3,    634.0,     -536.6,      -7.7,      -2.6},
  {4, 0,    912.6,        0.0,      -1.8,       0.0},
  {4, 1,    808.9,      286.4,       2.3,       1.1},
  {4, 2,    166.7,     -211.2,      -8.7,       2.7},
  {4, 3,   -357.1,      164.3,       4.6,       3.9},
  {4, 4,     89.4,     -309.1,      -2.1,      -0.8},
  {5, 0,   -230.9,        0.0,      -1.0,       0.0},
  {5, 1,    357.2,       44.6,       0.6,       0.4},
  {5, 2,    200.3,      188.9,      -1.8,       1.8},
  {5, 3,   -141.1,     -118.2,      -1.0,       1.2},
  {5, 4,   -163.0,        0.0,       0.9,       4.0},
  {5, 5,     -7.8,      100.9,       1.0,      -0.6},
  {6, 0,     72.8,        0.0,      -0.2,       0.0},
  {6, 1,     68.6,      -20.8,      -0.2,      -0.2},
  {6, 2,     76.0,       44.1,      -0.1,      -2.1},
  {6, 3,   -141.4,      61.5 ,       2.0,      -0.4},
  {6, 4,    -22.8,      -66.3,      -1.7,      -0.6},
  {6, 5,     13.2,        3.1,      -0.3,       0.5},
  {6, 6,    -77.9,       55.0,       1.7,       0.9},
  {7,  0,    80.5,       0.0,        0.1,        0.0},
  {7,  1,   -75.1,     -57.9,       -0.1,        0.7},
  {7,  2     -4.7,     -21.1,       -0.6,        0.3},
  {7,  3,    45.3,       6.5,        1.3,       -0.1},
  {7,  4,    13.9,      24.9,        0.4,       -0.1},
  {7,  5,    10.4,       7.0,        0.3,       -0.8},
  {7,  6,     1.7,     -27.7,       -0.7,       -0.3},
  {7,  7,     4.9,      -3.3,        0.6,        0.3},
  {8,  0,    24.4,       0.0,       -0.1,        0.0},
  {8,  1,     8.1,      11.0,        0.1,       -0.1},
  {8,  2,   -14.5,     -20.0,       -0.6,        0.2},
  {8,  3,    -5.6,      11.9,        0.2,        0.4},
  {8,  4,   -19.3,     -17.4,       -0.2,        0.4},
  {8,  5,    11.5,      16.7,        0.3,        0.1},
  {8,  6,    10.9,       7.0,        0.3,       -0.1},
  {8,  7,   -14.1,     -10.8,       -0.6,        0.4},
  {8,  8,    -3.7,       1.7,        0.2,        0.3},
  {9,  0,     5.4,       0.0,        0.0,        0.0},
  {9,  1,     9.4,     -20.5,       -0.1,        0.0},
  {9,  2,     3.4,      11.5,        0.0,       -0.2},
  {9,  3,    -5.2,      12.8,        0.3,        0.0},
  {9,  4,     3.1,      -7.2,       -0.4,       -0.1},
  {9,  5,   -12.4,      -7.4,       -0.3,        0.1},
  {9,  6,    -0.7,       8.0,        0.1,        0.0},
  {9,  7,     8.4,       2.1,       -0.1,       -0.2},
  {9,  8,    -8.5,      -6.1,       -0.4,        0.3},
  {9,  9,   -10.1,       7.0,       -0.2,        0.2},
 {10,  0,    -2.0,       0.0,        0.0,        0.0},
 {10,  1,    -6.3,       2.8,        0.0,        0.1},
 {10,  2,     0.9,      -0.1,       -0.1,       -0.1},
 {10,  3,    -1.1,       4.7,        0.2,        0.0},
 {10,  4,    -0.2,       4.4,        0.0,       -0.1},
 {10,  5,     2.5,      -7.2,       -0.1,       -0.1},
 {10,  6,    -0.3,      -1.0,       -0.2,        0.0},
 {10,  7,     2.2,      -3.9,        0.0,       -0.1},
 {10,  8,     3.1,      -2.0,       -0.1,       -0.2},
 {10,  9,    -1.0,      -2.0,       -0.2,        0.0},
 {10, 10,    -2.8,      -8.3,       -0.2,       -0.1},
 {11,  0,     3.0,       0.0,        0.0,        0.0},
 {11,  1,    -1.5,       0.2,        0.0,        0.0},
 {11,  2,    -2.1,       1.7,        0.0,        0.1},
 {11,  3,     1.7,      -0.6,        0.1,        0.0},
 {11,  4,    -0.5,      -1.8,        0.0,        0.1},
 {11,  5,     0.5,       0.9,        0.0,        0.0},
 {11,  6,    -0.8,      -0.4,        0.0,        0.1},
 {11,  7,     0.4,      -2.5,        0.0,        0.0},
 {11,  8,     1.8,      -1.3,        0.0,       -0.1},
 {11,  9,     0.1,      -2.1,        0.0,       -0.1},
 {11, 10,     0.7,      -1.9,       -0.1,        0.0},
 {11, 11,     3.8,      -1.8,        0.0,       -0.1},
 {12,  0,    -2.2,       0.0,        0.0,        0.0},
 {12,  1,    -0.2,      -0.9,        0.0,        0.0},
 {12,  2,     0.3,       0.3,        0.1,        0.0},
 {12,  3,     1.0,       2.1,        0.1,        0.0},
 {12,  4,    -0.6,      -2.5,       -0.1,        0.0},
 {12,  5,     0.9,       0.5,        0.0,        0.0},
 {12,  6,    -0.1,       0.6,        0.0,        0.1},
 {12,  7,     0.5,       0.0,        0.0,        0.0},
 {12,  8,    -0.4,       0.1,        0.0,        0.0},
 {12,  9,    -0.4,       0.3,        0.0,        0.0},
 {12, 10,     0.2,      -0.9,        0.0,        0.0},
 {12, 11,    -0.8,      -0.2,       -0.1,        0.0},
 {12, 12,     0.0,       0.9,        0.1,        0.0}};


}

【问题讨论】:

  • 使用 gcc,我无法生成您报告的警告。如果我添加选项 -Wall -Wextra,我只能看到未使用的变量警告和“警告:缺少成员 main()::wmm::zeta 的初始化程序”。
  • 无法重现该警告(GCC 4.3.4,-Wall -Wextra)。
  • 如果您认为警告可能会影响您的计算,我建议您要做的是识别和理解警告,而不是抑制警告。
  • @DevSolar:哇,我在 GCC 4.6 (mingw-w64, -std=c++0x -pedantic -Wextra -Wall -Wconversion -Weffc++ -Wmissing-include-dirs -Wstrict-aliasing) 中遇到错误:narrowing conversion of '-2.70000000000000017763568394002504646778106689453e+0' from 'double' to 'int' inside { } [-fpermissive] 这很奇怪,因为没有 -2.7。嗯...
  • @Greg 这就是我想做的,但是我找不到任何地方我混淆了我的整数和双打

标签: c arrays warnings structure


【解决方案1】:
{7,  2    -4.7,     -21.1,       -0.6,        0.3},

而不是

{7,  2,    -4.7,     -21.1,       -0.6,        0.3},

(缺少昏迷)第 50 行。

【讨论】:

  • 这不会导致分配失败吗?
  • 在那里你来了。现在,这引出了一个后续问题——为什么 GCC 没有抓住这个?
  • @DevSolar,gcc 使用 -Wall -Wextra 警告我该行缺少初始化程序,以及使用 -Wconversion 从 double 转换为 int。
  • @greg,C 规则允许缺少用零填充的初始值设定项。
  • @AProgrammer:你是对的,当然。我只是在寻找转换警告(我没有看到,因为我没有设置-Wconversion)。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2021-10-27
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2020-04-05
  • 1970-01-01
相关资源
最近更新 更多