C语言宏定义:#define OS_INT_ENTER() OSIntNesting++,EA=1
发布网友
发布时间:2022-05-21 14:10
我来回答
共2个回答
热心网友
时间:2023-10-27 09:25
这种宏定义方式 有没有 特殊名称,不清楚。
OS_INT_ENTER() 带小括号,显然不能再叫 宏常量。
这种定义,是预编译 时的 字符串 替代 处理方式定义,也就是,
#define 书写的字符串 替换成的字符串
只要程序里出现 OS_INT_ENTER()
就用 OSIntNesting++,EA=1 这串东西替代
写的是逗号,就用逗号,写的是分号,就用分号,结尾是什么就什么。
例如:
#include <stdio.h>
#include <stdlib.h>
#define OS_INT_ENTER() OSIntNesting++,EA=1
int main(){
int OSIntNesting=0,EA=0;
int x;
x = ( OS_INT_ENTER() );
printf("%d\n",x);
return 0;
}
-----------
源程序 x = ( OS_INT_ENTER() );
预编处理后 x = ( OSIntNesting++,EA=1);
小括号里是 “逗号表达式”,逗号表达式 的结果数值 等于 最 右 一个 表达式 的值,
最 右 一个 表达式 是 EA = 1, 结果数值 为 1。于是 x 得 1。
打印出 1。追问“预编处理后 x = ( OSIntNesting++,EA=1);”
用个逗号隔开。请问C里有支持这样的斌值的吗?能说下机器会怎么处理吗
追答(OSIntNesting++,EA=1) 这叫“逗号表达式”,逗号表达式 是 c 语言里表达式的一种,它 的运算结果 是一个值,把这个值 赋给x.
逗号表达式的值等于 最右一个表达式式的值。详细运算过程自己看书学习吧。这里无法开课。
热心网友
时间:2023-10-27 09:26
这种方式我觉得可以归为无参宏,就是不管怎么写替换字符串就行了。还有带参宏如
#define s(a,b) a*b 使用的时候可以 s(1,2) 值为2