你不能忽略错误1 。您只能忽略警告。更改代码。
printf("\\x%02x", ((unsigned char *)code)[i]);
这只是一个猜测,因为没有文档或代码原作者的输入,我们没有确凿的证据证明代码实际上应该做什么。但是,上面的更正是非常合理的,这是一个简单的错字(原作者忘记了一个\
),并且可以想象作者使用了一个默默地忽略错误的 C 编译器(Python 在设计上具有相同的行为)。
上面的代码行,或者几乎完全相同的代码行,在全球可能有数万个源文件中都可以找到。它用于使用转义序列对二进制 blob 进行编码,因此可以将其作为文字嵌入到 C 程序中。类似的代码出现在 JSON、XML 和 HTML 发射器中。我可能已经写了一百遍了。
或者,如果代码应该打印出字符,这将不起作用:
printf("\x%02x", ((unsigned char *)code)[i]);
这不起作用,因为转义序列(以\
, like开头的东西\x42
)由 C 编译器处理,但格式字符串(以%
, like开头的东西%02x
)由printf
. 上述代码行可能仅在顺序颠倒时才有效:如果printf
先运行,则在编译程序之前。所以不,它不起作用。
如果作者打算写文字字符,则以下内容更合理:
printf("%c", ((unsigned char *)code)[i]); // clumsy
putchar((unsigned char *)code)[i]); // simpler
所以你要么知道原作者只是打错了,忘记了一个\
(我一直犯那个错误),要么作者不知道。
笔记:
1:错误意味着 GCC 不知道代码应该做什么,因此无法继续。