3

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

callbackTable *callbacks = generateLoggingCallback();

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

callbackTable *callbacks;
callbacks = generateLoggingCallback();

函数原型是:

callbackTable *generateLoggingCallback();

并且实现是

callbackTable *generateLoggingCallback() { ... }

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

4

3 回答 3

7

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

于 2009-12-30T13:20:28.327 回答
2

找到了答案,按照这个。我没有引用包含函数原型的头文件。因此,据我了解,编译器猜测函数的类型签名,并将返回类型猜测为 default int

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

于 2009-12-30T13:22:46.267 回答
0

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

于 2009-12-30T13:15:24.877 回答