gpt4 book ai didi

c - 如何在宏中编写这样的 if 条件?

转载 作者:行者123 更新时间:2023-11-30 20:11:49 26 4
gpt4 key购买 nike

我对宏还很陌生。
我知道如何使用三元运算符来使用 if 条件。
如何将其转换为 #define

if(i==j)
{
count=count+1;
break;
}

我试试运气,但似乎这是错误的:

#define ifcount(i,j) ((i)==(j)? count=count+1\
break:0)

这是我要转换的代码 http://pastebin.com/i7Tuyh00

最佳答案

使用(滥用)宏来更改程序流程通常是一个坏主意,因为阅读您代码的人(几年后的您自己)可能会对程序流程中的意外跳转感到惊讶。

也就是说,您的问题与三元运算符无关。实际上,三元运算符的右侧不能包含中断,只能包含表达式。

但是宏是万能的,所以你可以这样做:

#define ifcount(i,j) if ((i)==(j)) { count=count+1; break; }

这个宏的主要问题是人们在使用它时会写一个;,如果在另一个if/else对之间使用它会严重破坏,不带大括号:

if (...)
ifcount(a,b);
else // <--- syntax error because the previous ; breaks the if /else relation
...;

标准解决方案是使用 do/while(0) 习惯用法:

#define do { ifcount(i,j) if ((i)==(j)) { count=count+1; break; } } while (0)

但这行不通,因为 break 会破坏这个内部 while,而不是下面您想要的(归功于@abelenky)。

唯一允许复合语句并以 ; 结尾的 C 语句是:

#define ifcount(i,j) if ((i)==(j)) { count=count+1; break; } else

问题是,如果您在使用 ifcount(i,j) 时忘记添加 ;,您将得到一个静默编译,而不是编译器错误,并且令人惊讶的是行为改变。

关于c - 如何在宏中编写这样的 if 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39125854/

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