我已经给出了 C 代码,其中heading语句包含以下内容:
#define, EQ(a, b) ((a) == (b))
这是什么意思?
答案 0 :(得分:6)
它没有任何意义:此代码格式错误。紧跟在#define
之后的令牌必须是,
不是的标识符。
如果要移除,
,则会定义一个名为EQ
的{{3}},其中包含两个参数。
答案 1 :(得分:6)
逗号是一个错误,会阻止代码编译:我会认为这是一个错字。
假设:
#define EQ(a, b) ((a) == (b))
这为等于运算符==
定义了一个宏。
稍后在代码中使用此宏,您可以键入,例如:
if (EQ(2+2, 4))
而不是:
if (2+2 == 4)
真的不是很有用。
答案 2 :(得分:1)
让我们一步一步来看
#define MAX 10
这将在您的代码文件中将“MAX”字的每个实例替换为10。这非常类似于定义具有一个主要差异的常量变量。 #define语句的解释在编译之前完成。这有助于一个例子使用MAX作为数组大小。如果您使用了变量,那么在许多情况下会导致编译器错误。
您可以在Linux终端中使用cpp <filename.c>
命令查看执行宏时会发生什么。
这个代码的例子:
#define MAX 10
int numbers[MAX];
预处理后的(即预处理器宏的解释)
int numbers[10];
请注意,#define语句一旦解释就会消失。
这将我们带到另一个例子
#define square(x) (x * x)
我们代码中的square(x)
的每个实例不仅会被(x * x)
替换,而且x的值也会被替换。其效果与功能减速相似,但又有所不同
所以
square(5)
将替换为(5 * 5)
最后我们的例子
#define, EQ(a, b) ((a) == (b))
这将EQ(a, b)
((a) == (b))
的每个实例
所以举个例子
EQ(4, 5)
将替换为((4) == (5))
现在“==”是什么意思?它是“检查是否相等”如果4和5相等,则整个表达式将评估为1(显然不是真的),因此该表达式最终将被评估为0。
或多或少喜欢 此功能的效果
int EQ(int a, int b)
{
return (a == b);
}
也可以写成
int EQ(int a, int b)
{
if (a ==b) return 1;
if (a !=b) return 0;
}
请注意,使用宏我们避免了两个变量声明,并且没有真正的函数调用,并且通常更快。如果你有一个较慢的处理器(或微处理器),这个优势将是显而易见的。
最后让我说明显而易见的
#define simple_macro 5
int some_integer_variable = 10;
.
.
.
some_integer_variable = simple_macro;
simple_macro = 12; /* illegal statement */
simple_macro++; /* illegal statement */
因为在运行预处理器后,这将是
int some_integer_variable = 10;
.
.
.
some_integer_variable = 5;
5 = 12;
5 ++;
哦!我可能谈得太多,但让我告诉你这个(显而易见的)代码
#define MAX 10
int variable = MAX; /*this is a MAX variable */
char some_string[] = "the MAX value"; /* no replacement will happen here */
int variable_MAX; /* no replacement will happen here */
运行预处理器后
int variable = 10;
char some_string[] = "the MAX value";
int variable_MAX;