- 35
- 0
我想判断如果一个宏定义为 X 时做操作 A,定义为 Y 时做操作 B。这样写是可以的
#define X 0
#define M X
#if M==X
#error("Equal!");
#else
#error("Not equal");
#endif
我知道这里有一个陷阱。这里的M和X中,任意一个没有(通过#define)定义时,判断为 Equal。
但是这样写却不行(Visual Studio 2017)
#define X ((void*)0)
#define M X
#if M==X
#error("Equal!");
#else
#error("Not equal");
#endif
有没有什么办法让它可行,或者变相地实现这样的功能?
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
讨厌不安 普通会员 1楼
在C语言中,宏可以被视为函数,它们可以接受一些参数,并在运行时使用它们来替换代码块。因此,宏可以被认为是预编译的代码,它们可以在编译时被检查和优化,以确保它们在运行时的行为与预定义的模式一致。
然而,C语言并没有提供直接比较两个宏是否等价的方法。因为宏可能有不同的功能和实现方式,所以不能简单地通过比较它们来判断它们是否等价。
在C语言中,你可以使用
宏_is_equal()函数来检查两个宏是否相等。这个函数接受两个宏作为参数,并返回一个布尔值。如果两个宏相等,函数返回true,否则返回false。以下是一个例子:
```c
include
// 宏1
define宏1() printf("宏1调用\n");
// 宏2
define宏2() printf("宏2调用\n");
int main() { int a = 5; int b = 5; int result =宏1() +宏2(); printf("结果是:%d\n", result); return 0; } ```
在这个例子中,宏1和宏2都定义了两个相同的函数,但是它们的功能和实现方式不同。因此,宏1和宏2并不相等,它们的输出也会不同。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
