【发布时间】:2021-10-28 15:59:40
【问题描述】:
我在代码中使用了snprintf指令:
snprintf(debugstr, sizeof(debugstr), "FW: %s ver %s\r\n", FW_NAME, FW_VERSION);
我正在使用带有编译器 XC16 v1.31 的 MPLAB IDE,并在项目属性部分启用了“使用旧版 libc”选项。 当我构建项目时,我收到消息:“BUILD SUCCESSFUL (total time: 104ms)”。
但是,在编辑器窗格的源 .c 文件中,当我将鼠标指针移到上述代码行号上时,会显示一条错误消息:“无法解析标识符 snprintf”(请参阅随附的图像) .
我的问题是: 项目成功构建并同时出现未解决的标识符错误消息是否正常?为什么?
感谢您的关注!
G
【问题讨论】:
-
也许打开所有编译器警告?它必须假设
snprintf()是一个没有原型的函数,并将找到它的工作留给链接器。 注意编译器创建的错误假设代码可能(将会)错误地与预编译的库代码交互。 -
你
#include <stdio.h>了吗? -
顺便说一句:
snprintf()是随 C99 引入的,它在 C89/C90 实现中可能不可用/klonky。 -
XC16 文档 (link) 说:“1.3.1 ANSI C 标准 [...] 编译器符合 ANSI 定义的 ANSI C 标准规范 (ANSI x3.159-1989) [...]" ... 所以你有一个 C89 编译器和一个 C99 库。祝你好运 :-) 我建议你保留该语言的 C89 子集。
-
发现 this interesting document about C89 以及与 C95/C99/C11 的差异。
标签: c printf identifier