作为我家庭作业的一部分,我得到了这些代码来帮助完成他们给我们的任务。。。为了创建一个支持管道、后台进程和许多内置命令等的基本shell,我已经阅读了它们为解析提供的代码。。。
我对C中的#define关键字很熟悉,但是在下面的代码中,我还没有看到它的用法:也就是说,c用于什么?我猜它是指一个角色,但我不确定:

#define PIPE  ('|')
#define BG    ('&')
#define RIN   ('<')
#define RUT   ('>')

#define ispipe(c) ((c) == PIPE)
#define isbg(c)   ((c) == BG)
#define isrin(c)  ((c) == RIN)
#define isrut(c)  ((c) == RUT)
#define isspec(c) (ispipe(c) || isbg(c) || isrin(c) || isrut(c))

任何非常感谢的帮助或建议。

最佳答案

您给出的最后五个#define语句定义宏,每个语句都有一个参数,这里总是称为c。从技术上讲,前四个#define语句也是宏,但它们不需要参数-遇到它们时,只需替换它们的“值”;程序员经常将没有参数的宏称为标记,这里的PIPE标记的标记值为('|')
稍后在文件中(可能)会出现调用这些宏中的一个或多个的情况,并且该调用将具有实际参数的值,例如:

if (ispipe(test_arg)) ++npipes;

此宏“调用”将(由预处理器)替换为以下扩展:
if (((test) == ('|')) ++npipes;

同样,对于其他的#定义XXX(c)宏。
注意:在宏定义中添加(很多)括号是很常见的,只是为了确保代码在预处理器完成其工作后按照您的“想法”执行。
请随时要求进一步解释和/或澄清。

关于c++ - #define在此实例中的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58234087/

10-15 14:52