C语言宏定义:#define OS_INT_ENTER() OSIntNesting++,EA=1
答案:2 悬赏:30 手机版
解决时间 2021-02-27 06:31
- 提问者网友:送舟行
- 2021-02-26 17:31
C语言宏定义:#define OS_INT_ENTER() OSIntNesting++,EA=1 请问这种宏定义方式叫什么名,为什么OSIntNesting++,EA=1这里是用逗号,而不是分号,而且结尾没有分号呢?
最佳答案
- 五星知识达人网友:底特律间谍
- 2021-02-26 18:38
这种宏定义方式 有没有 特殊名称,不清楚。
OS_INT_ENTER() 带小括号,显然不能再叫 宏常量。
这种定义,是预编译 时的 字符串 替代 处理方式定义,也就是,
#define 书写的字符串 替换成的字符串
只要程序里出现 OS_INT_ENTER()
就用 OSIntNesting++,EA=1 这串东西替代
写的是逗号,就用逗号,写的是分号,就用分号,结尾是什么就什么。
例如:
#include
#include
#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。
OS_INT_ENTER() 带小括号,显然不能再叫 宏常量。
这种定义,是预编译 时的 字符串 替代 处理方式定义,也就是,
#define 书写的字符串 替换成的字符串
只要程序里出现 OS_INT_ENTER()
就用 OSIntNesting++,EA=1 这串东西替代
写的是逗号,就用逗号,写的是分号,就用分号,结尾是什么就什么。
例如:
#include
#include
#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。
全部回答
- 1楼网友:零点过十分
- 2021-02-26 19:29
这种方式我觉得可以归为无参宏,就是不管怎么写替换字符串就行了。还有带参宏如
#define s(a,b) a*b 使用的时候可以 s(1,2) 值为2
再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯