作为我家庭作业的一部分,我得到了这些代码来帮助完成他们给我们的任务。。。为了创建一个支持管道、后台进程和许多内置命令等的基本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/