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