【发布时间】:2015-06-17 12:02:36
【问题描述】:
我的情况有点奇怪。我正在一些设备上编译。 如果我在发布模式下编译,例如
makeCore projectname release exe
一切都很好。如果我在调试模式下编译:
makeCore projectname debug exe
我收到以下警告:
src/administration.c: In function 'SetIp':
src/administration.c:1409: warning: implicit declaration of function 'InputIp'
问:这是否意味着在发布模式下使用我的应用程序是安全的?
为什么会出现这种行为?该怎么办?我正在使用以发布模式编译的二进制文件,我应该担心吗?
编辑:我应该先检查一下这个编译器符合哪个 C 标准,如果它是 C89 之前的,那么我不应该担心,因为它不是未定义的行为吗?
Edit2:我的最终问题是我是否触发了未定义的行为以及如何检查我是否触发了未定义的行为?我不确定我的编译器是否实现了 C89 或 C90 等。也许我应该问供应商这是否是我上面所做的未定义行为?
更新:
这是函数签名:
s32 InputIp(s32 line, u8 * text, s32 otherline, u8 *IP, u8 coordx, s32 coordy);
它是这样称呼的:
s32 res = InputIp(someconstant, u8pointer, otherconstant, otheru8pointer, integer1, integer2);
最后一个问题:由于我首先收到此警告,我可以确定我使用的是使用 C89 的编译器吗?否则会报错?我说的对吗?
【问题讨论】:
-
C中的Release mode和debug mode到底是什么? [提示:您缺少标签] -
也许编译器警告仅在调试模式下打开。检查您的构建设置!
-
@KlasLindbäck:请查看我更新的问题
-
您应该考虑的唯一行动方案是调查 为什么
InputIp未在调试版本中声明(和/或为什么未在发布版本中调用它)然后在找到问题后解决问题。 -
@MattMcNabb:这对我来说并不容易检查它是一个我不知道的复杂 makefile;修复没问题,但我认为这个软件已经写到很多设备上
标签: c