typedef和define混用产生的错误

Posted zzdbullet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typedef和define混用产生的错误相关的知识,希望对你有一定的参考价值。

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

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混用产生的错误的主要内容,如果未能解决你的问题,请参考以下文章

宏定义的define和typedef的区别

typedef 与 #define 的区别

typedef与#define的区别

typedef与define宏定义用于声明新的类型之间的区别

#define和typedef定义变量

Typedef & # define