我是一名CS学生,我正在学习C.我有一个任务,我们的教师给了我们一个.h和两个.c文件,这些文件包含要求我们完成功能的代码段。
在头文件中,他有以下#define语句:
# ifndef LT
# define LT(A, B) ((A) < (B))
# endif
# ifndef EQ
# define EQ(A, B) ((A) == (B))
# endif
对于第一个定义,我知道LT是“名称”,但我不明白右边的语法是做什么的。与第二个相同。
在我看来,LT是两个变量A和B的比较,它检查A是否大于B。
请有人帮我理解这个
答案 0 :(得分:2)
这些是宏。
如果您的c代码中有
if(LT(xx, yy))
{
printf("xx is less than yy\n");
}
然后在编译时将代码更改为
if((xx) < (yy))
{
printf("xx is less than yy\n");
}
这是由预处理器将其看到的#defined事物更改为其内容
来完成的答案 1 :(得分:2)
尝试获取有关C的书籍并阅读预处理器功能。它只是一个没有语义含义的句法替代。
第一个可以这样读:
如果未定义LT
,则引入预处理器定义LT
。
从定义的那一点开始,预处理器在哪里找到文本(我不是故意用字符串来表示点)LT
有两个参数,让我们说text1
和text2
,然后,此文LT(text1, text2)
将替换为((text1) < (text2))
。
第二个相同。
注意括号,它们很重要。在代码LT(x+y, z-1)
中举例说明以下外观,您应该理解为什么括号在这里很重要。
我可以推荐K&amp; R用于学习C.它有一章专门用于预处理器并且不难理解。 你学到的东西越多,你就会注意到我的术语在这里并不是最好的,但是现在试着去理解这个概念。