gpt4 book ai didi

检查补丁宏错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:39 24 4
gpt4 key购买 nike

在我的 C 代码上使用 chechpatch.pl 时出现以下错误:

main.c:14: ERROR: Macros with complex values should be enclosed in parentheses

宏本身:

#define CHECK(x, y) if (x) { \
perror(y); \
exit(-1); }

/* USAGE */
CHECK((dup2(in, 0) < 0), "dup2"); //or just (dup2(in, 0) < 0, "dup2")

只是一个简单的错误检查来缩短我的代码并节省一些工作。 x 是条件,y 是字符串文字。

这是误报吗?

但是,我真的很想修复它,所以有什么想法吗?

最佳答案

好吧,在与编译器和检查补丁进行了一番较量(参差不齐)之后,我学习了 C 宏基础知识并取得了成功。因为,我没有找到关于我的问题的太多信息,所以我会把它留在这里。

首先,我尝试用方括号括起该值,但由于它是一个 if 语句,它解开起来非常笨拙,给出了 error: expected expression before ‘if’

然后,当然,我错过了一个括号,导致 error: expected ‘while’ before ‘if’。所以,正确的做法是

#define CHECK(x, y) do { if (x) {perror(y); exit(-1); } } while (0)

以这种方式,表达式保持完整,checkpatch 关闭。

希望有人觉得这有帮助。

关于检查补丁宏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com