我收到一个奇怪的编译警告。它是间歇性的,并不会出现在每个版本中。我得到警告“初始化从没有强制转换的整数中生成指针”,用于以下行:
callbackTable *callbacks = generateLoggingCallback();
并且,为了完整性,这给出了相同的结果
callbackTable *callbacks;
callbacks = generateLoggingCallback();
函数原型是:
callbackTable *generateLoggingCallback();
,实施是
callbackTable *generateLoggingCallback() { ... }
所以,我不太确定问题是什么。想法?
答案 0 :(得分:7)
如果它是纯C,是否有关于'未知'功能的警告?如果是,则编译器确定未知函数返回int,并继续...检查是否包含正确的头,并在使用之前声明该函数。
答案 1 :(得分:2)
根据this找到答案。我没有引用包含函数原型的头文件。所以,据我所知,编译器正在猜测函数的类型签名,并将返回类型猜测为默认的int
。
这一切都有效,因为包含该函数的实现文件包含在构建中,返回类型(假设为int
)只是放在一个声明为指针的变量中。
答案 2 :(得分:0)
函数generateLoggingSmfReaderCallback还是generateLoggingCallback?如果原型中的函数名称与您的调用中的函数名称不匹配,那么奇怪的是,您不会在每个构建中收到警告。