我正在尝试编译我在网上找到的一些代码,但 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/