赋值使整数警告指针

时间:2012-01-07 23:31:22

标签: c header gcc-warning

部首:

#ifndef BIT_H_INCLUDE_GUARD
#define BIT_H_INCLUDE_GUARD

typedef unsigned char byte;

typedef struct{
    size_t* size;
    byte* map;
} bit;

bit* bdcteate(byte* size);

#endif /* BIT_H_INCLUDE_GUARD */

源:

#include <stdlib.h>
#include "bit.h"

bit* bdcreate(byte* size){
    bit* d;
    byte i;
    size_t s = 0;
    for(i = 1; i < size[0]; i++){
        s += (size_t) size[i];
    }
    if(!(d = malloc(sizeof(bit)))){
        return (bit*) NULL;
    }
    if(!(d->size = malloc(sizeof(size_t)))){
        return (bit*) NULL;
    }
    if(!(d->map = malloc(s * sizeof(byte)))){
        return (bit*) NULL;
    }
    *d->size = s;
    return (bit*) d;
}

主:

#include <stdlib.h>
#include "bit.h"

void main(void){
    byte *b, i;
    byte size = 9;
    b = malloc((size+1) * sizeof(byte));
    b[0] = size;
    for(i = 1; i <= size; i++){
        b[i] = (b[i-1] + 10);
    }   

    bit* dict;
    if(!(dict = bdcreate(b))){ /* warning: assignment makes pointer from integer without a cast */
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
}

正如您在注释行中看到的那样,我得到“警告:赋值从整数中生成指针而没有强制转换”,尽管我尝试明确声明我正在返回指针。

我正在使用gcc(gcc -o test main.c bit.c)编译,程序似乎运行正常。

我应该忽略这一点,还是会在我睡觉时回来咬我?

2 个答案:

答案 0 :(得分:10)

在标题中:

bit* bdcteate(byte* size);
        ^ this is a typo

这意味着编译器将在您的main中推断出bdcreate的默认签名,默认签名将返回int

答案 1 :(得分:2)

bit.h中有拼写错误。 “bdcteate”应为“bdcreate”。所以在bit.h中没有bdcreate的前向声明,这意味着编译器假定main中的调用返回int。该代码仍然有效,因为在CPU上你使用的int足够大以包含一个指针或者被剥离的位不会使得到的指针无效。