c - 强制 gcc 编译/忽略错误消息

标签 c hex

我正在尝试编译我在网上找到的一些代码,但 gcc 一直给我错误消息。

有什么方法可以绕过错误并编译?

ttys000$ gcc -o s-proc s-proc.c 
s-proc.c:84:18: error: \x used with no following hex digits

这是它一直提示的台词:

printf("\x%02x", ((unsigned char *)code)[i]);

...

第一次发帖在这里,所以如果我违反了任何规则或不够具体,请告诉我。

最佳答案

您不能忽略错误1。您只能忽略警告。更改代码。

printf("\\x%02x", ((unsigned char *)code)[i]);

这只是一个猜测,因为没有文档或代码原作者的输入,我们没有确凿的证据证明代码实际应该做什么。然而,上面的更正是非常有道理的,这是一个简单的错字(原作者忘记了一个\),并且可以想象作者使用的C编译器默默地忽略了错误(Python 在设计上具有相同的行为)。

上面的代码行,或者几乎完全相似的代码,可以在全局范围内数以万计的源文件中找到。它用于使用转义序列对二进制 blob 进行编码,因此它可以作为文字嵌入到 C 程序中。类似的代码出现在 JSON、XML 和 HTML 发射器中。我可能已经写了一百遍了。

或者,如果代码应该打印出字符,这将不起作用:

printf("\x%02x", ((unsigned char *)code)[i]);

这是行不通的,因为转义序列(以 \ 开头的东西,比如 \x42)是由 C 编译器处理的,但是格式字符串(以 \ 开头的东西)以 % 开头,如 %02x) 由 printf 处理。上面的代码行可能只有在顺序颠倒时才有效:如果 printf 先运行, 您编译程序之前。所以不,它不起作用。

如果作者打算写文字字符,则以下内容更合理:

printf("%c", ((unsigned char *)code)[i]);  // clumsy
putchar((unsigned char *)code)[i]);        // simpler

所以您知道原作者只是打错了字,忘记了一个\(我一直都犯了这个错误),或者作者没有任何线索。

注意事项:

1:错误意味着 GCC 不知道代码应该做什么,因此无法继续。

关于c - 强制 gcc 编译/忽略错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631210/

相关文章:

c - 按位宏不起作用 (Avr C)

c - 从 C 语言文件中读取矩阵

在 C 中将 Base 16(十六进制)转换为 Base 36 字符串

c - C 中的 malloc 字符串

c - Visual C 2012 : I am getting weird errors. 提供代码段和错误

c++ - 如何将 std::string 长度转换为十六进制然后再转换回字符串?

php - 将 unicode 转换为 html 实体十六进制

c++ - 十六进制转储实用程序 C++ 显示十六进制和 Ascii

c++ - 在 C 和 C++ 中打印文件的十六进制数

c - 为什么 malloc-ed 数组和非 malloced 数组的大小不同?