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

Need Help understanding particular define directive in C

我是一名 CS 学生,我正在学习 C。我有一个作业,其中我们的讲师给了我们一个 .h 和两个 .c 文件,这些文件的代码段需要我们完成才能使函数工作。

在头文件中,他有以下#define 语句:

# ifndef LT
# define LT(A, B) ((A) < (B))
# endif

# ifndef EQ
# define EQ(A, B) ((A) == (B))
# endif

对于第一个定义,我知道 LT 是 "name" 但我不明白右边的语法在做什么。与第二个相同。

在我看来,LT 是两个变量 A 和 B 的比较,它检查 A 是否大于 B。

有人能帮我理解一下吗

这些是宏。

如果你的c代码中有

if(LT(xx, yy))
{
   printf("xx is less than yy\n");
}

然后在编译时将代码更改为

if((xx) < (yy))
{
   printf("xx is less than yy\n");
}

这是通过预处理器将它看到的#defined 内容更改为内容来完成的

尝试获取有关 C 的书籍并阅读预处理器功能。只是句法替换,没有语义。

第一个可以这样读: 如果未定义 LT,则引入预处理器定义 LT。 从预处理器在何处找到文本的定义点(我不是故意在这里说字符串来说明一点)LT 有两个参数,比方说 text1text2,然后此文本 LT(text1, text2) 将被替换为 ((text1) < (text2)).

第二个也一样。

注意括号,它们很重要。在你的代码中做一个如下的例子LT(x+y, z-1)你应该明白为什么括号在这里很重要了。

学习C我可以推荐K&R,它有一章专门讲预处理器,不难理解。 你学得越多,你会发现我的术语在这里不是最好的,但现在试着掌握这个概念。