需要帮助理解 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
有两个参数,比方说 text1
和 text2
,然后此文本 LT(text1, text2)
将被替换为 ((text1) < (text2))
.
第二个也一样。
注意括号,它们很重要。在你的代码中做一个如下的例子LT(x+y, z-1)
你应该明白为什么括号在这里很重要了。
学习C我可以推荐K&R,它有一章专门讲预处理器,不难理解。
你学得越多,你会发现我的术语在这里不是最好的,但现在试着掌握这个概念。
我是一名 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
有两个参数,比方说 text1
和 text2
,然后此文本 LT(text1, text2)
将被替换为 ((text1) < (text2))
.
第二个也一样。
注意括号,它们很重要。在你的代码中做一个如下的例子LT(x+y, z-1)
你应该明白为什么括号在这里很重要了。
学习C我可以推荐K&R,它有一章专门讲预处理器,不难理解。 你学得越多,你会发现我的术语在这里不是最好的,但现在试着掌握这个概念。