码迷,mamicode.com
首页 > 其他好文 > 详细

typedef和define混用产生的错误

时间:2019-03-04 11:16:27      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:__int64   类型   写代码   div   内容   注释   style   span   sig   

最近在写代码过程中,发现一个问题,编译总是过不去,报错如下:

stdint.h:120:28: error: duplicate unsigned
stdint.h:120:28: error: long long long is too long for GCC

打开stdint.h这个文件,发现120行是这样的内容:

#if __have_long64
typedef signed long int64_t;
typedef unsigned long uint64_t;
#define __int64_t_defined 1
#elif __have_longlong64
typedef signed long long int64_t;
typedef unsigned long long uint64_t;
#define __int64_t_defined 1
#elif  __STDINT_EXP(INT_MAX) > 0x7fffffff
typedef signed int int64_t;
typedef unsigned int uint64_t;
#define __int64_t_defined 1
#endif

继续查找,发现我们代码中的某一个头文件中有这样的定义:

#ifndef uint64_t
#define uint64_t unsigned long long
#endif

在这个头文件中,把上面这三行注释掉之后,在include<stdint.h>,编译通过。

总结

define在预处理阶段,typedef在编译阶段,两个头文件中都定义了uint64_t,定义方式不同,导致编译过程中,编译器认为我们声明一个long long long的数据类型。

 

typedef和define混用产生的错误

标签:__int64   类型   写代码   div   内容   注释   style   span   sig   

原文地址:https://www.cnblogs.com/zzdbullet/p/10469485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!