“警告:初始化使得指针来自整数而没有强制转换”。 但我不认为这样做

我收到一个奇怪的编译警告。 它是间歇性的,并不会出现在每个版本中。 对于以下行,我收到警告“初始化从没有强制转换的整数生成指针”:

callbackTable *callbacks = generateLoggingCallback(); 

而且,为了完整起见,这给出了相同的结果

 callbackTable *callbacks; callbacks = generateLoggingCallback(); 

函数原型是:

 callbackTable *generateLoggingCallback(); 

并且实施是

 callbackTable *generateLoggingCallback() { ... } 

所以,我不太确定问题是什么。 想法?

如果它是纯C,是不是有关于’未知’function的警告? 如果是,则编译器确定未知函数返回int,并继续…检查是否包含正确的头,并在使用之前声明该函数。

找到答案, 按此 。 我没有引用包含函数原型的头文件。 所以,据我所知,编译器正在猜测函数的类型签名,并将返回类型猜测为默认的int

这一切都有效,因为包含该函数的实现文件包含在构建中,返回类型(假定为int )只是放在一个声明为指针的变量中。

函数generateLoggingSmfReaderCallback还是generateLoggingCallback? 如果原型中的函数名称与您的调用中的函数名称不匹配,那么奇怪的是,您不会在每个构建中收到警告。