宏冲突的解决问题

这个问题在10个月前我还需要去找领导,现在终于不用了。感觉好简单的说。
问题是这样,我引用了一个开源库,包含的它的头文件,显示宏冲突。开源库叫做TAO.c、TAO.h,我自己的文件叫OKAMOTO.c(大爱冈本多绪)。

1.define冲突

其中TAO.h中定义的宏和OKAMOTO.c中的冲突了,那肯定是ifndef啊,但是如果我把.h中的宏加上ifndef的话,会不会影响到TAO.c中原有的内容呢?我认为是不会的,问了几个同事,他们不确定,我就自己测试了一下,下面是内容
TAO.c

#include <stdio.h>
#include "TAO.h"
int main(void)
{
	printf("x=%d\n",X);
	return 0;
}

TAO.h

#ifndef X
#define X (1+1)
#endif

OKAMOTO.c

#include <stdio.h>
#define X (1+2)

#include "TAO.h"
int main(void)
{
	printf("x=%d\n",X);
	return 0;
}

原来确实是不会的,因为在编译TAO.c的时候X是没有定义的,所以会选择进入ifndef,但是在执行OKAMOTO.c的时候宏已经定义过了,自然就不会ifndef,互相之间并不影响

2.typedef冲突

这个又有点不一样,不能直接用ifndef了,比如

typedef unsigned int ULONG;

要是这么写就蠢了

#ifndef ULONG
typedef unsigned int ULONG;
#endif

那咋办嘞,这个很有意思
先看OKAMOTO.c

#include <stdio.h>
#define X (1+2)
typedef unsigned long ULONG;
#define type_conflicting_ULONG
#include "TAO.h"
int main(void)
{
	printf("x=%d\n",X);
	return 0;
}

再看TAO.h

#ifndef X
#define X (1+1)
#endif

#ifndef type_conflicting_ULONG
typedef unsigned int ULONG;
#endif

有没有感觉智商受到了侮辱,哈哈哈

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tux~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值