【问题标题】:warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]警告:从指针转换为不同大小的整数 [-Wpointer-to-int-cast]
【发布时间】:2014-03-20 05:26:38
【问题描述】:

这是我的程序(变量是德语)

    int ABFRAGE(int max,int min){
    int eingabe;
        do {
            printf("\t>");
            scanf("%i",&eingabe);
        } while (eingabe > max || eingabe < min);
        return eingabe;
    }

    #define ABFRAGEERGEBNIS Abfrageergebnis = (int)ABFRAGE
int main(void);
   int Abfrageergebnis;
        ABFRAGEERGEBNIS; <-!
        if (Abfrageergebnis == 2)
        NAMENSAENDERUNG(i,Name);
        if (Abfrageergebnis == 1)
    getchar();
        STRING_PROLOG;

它应该得到一个数字来保存它并这样做,if 部分在说什么。但是在

【问题讨论】:

  • 指针和int 仅在极少数情况下兼容,在现代 64 位系统上几乎从不兼容。如果要使用可以保存指针或整数的类型,请使用intptr_t。但我不推荐它(原因是混淆和可读性)。
  • @JoachimPileborg jm,它不工作。我必须添加一些特殊的库吗?我刚刚用 intptr_t 改变了 int 是不是这样?
  • 是否有另一种不使用 int 的方式来定义它?
  • Abfrageergebnis=ABFRAGE(2,1);

标签: c pointers integer warnings


【解决方案1】:

我认为,使用您当前的代码,您正在将内存地址读入 int,这不是您想要做的。我建议您编写第二行代码int *eingabe;

编辑:我完全错了。我认为错误在这里:#define ABFRAGEERGEBNIS Abfrageergebnis = (int)ABFRAGE。您正在调用函数 ABFRAGE 但未指定参数 max 和 min。你也不需要 (int) 那里。

函数 ABFRAGE 的方式很好 - 你只需要将我提到的行更改为 #define ABFRAGEERGEBNIS Abfrageergebnis = ABFRAGE(max, min)。您还需要定义 max 和 min,这是我在测试时在 main 中所做的。

【讨论】:

    【解决方案2】:

    那个宏太可怕了,你为什么要使用它?

    这个:

    #define ABFRAGEERGEBNIS Abfrageergebnis = (int)ABFRAGE
    
    ABFRAGEERGEBNIS; <-!
    

    将扩展为

    Abfrageergebnis = (int) ABFRAGE;
    

    换句话说,您将ABFRAGE 函数的地址分配给int 变量Abfrageergebnis

    杀死宏,然后做:

    Abfrageergebnis = ABFRAGE();
    

    对函数进行适当的调用

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 2012-03-04
      • 2021-03-10
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多