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