需要帮助理解C中的特定定义指令

时间:2016-04-15 20:12:23

标签: c syntax macros c-preprocessor

我是一名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。

请有人帮我理解这个

2 个答案:

答案 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有两个参数,让我们说text1text2,然后,此文LT(text1, text2)将替换为((text1) < (text2))

第二个相同。

注意括号,它们很重要。在代码LT(x+y, z-1)中举例说明以下外观,您应该理解为什么括号在这里很重要。

我可以推荐K&amp; R用于学习C.它有一章专门用于预处理器并且不难理解。 你学到的东西越多,你就会注意到我的术语在这里并不是最好的,但是现在试着去理解这个概念。