账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    C 语言比较两个宏是否等价
    35
    0

    我想判断如果一个宏定义为 X 时做操作 A,定义为 Y 时做操作 B。这样写是可以的

    #define X 0
    #define M X
    #if M==X
        #error("Equal!");
    #else
        #error("Not equal");
    #endif
    我知道这里有一个陷阱。这里的 MX 中,任意一个没有(通过#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并不相等,它们的输出也会不同。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部