typedef重复定义 和 error: ‘long long long’ is too long for GCC
今天发现一个很有意思的编译问题,然后在Stack Overflow上也有看到类似的。就是出现了 long long long 类型错误提示 错误提示如下: /home/yejy/algorithm_and_data_structure/main.cpp:50:17: error: ‘long long long’ is too long for GCC #define INT64 long long ^ 顾名思义,一个long占4个字节,两个就是8字节,总共64位,等于系统是64位的,如果你使用3个long那就96位了,那肯定会有问题,正常情况下也没人会定义三个long。 ``` #define INT64 long long ``` 然后看代码出错的地方,就是一个宏定义,怎么会出现问题呢? 然后仔细看了一下代码发现是 链接外部库 导致的,工程 A 链接了 B_lib.so 和 C_lib.so 两个动态库, 然后 B 中用宏定义了 long long , C 中使用typedef重新命名了 long long,顺序刚好是宏定义在前,等价于下面两句代码: ``` #define INT64 long long typedef long long INT64; <p style="font-size: 15px; text-indent:2em; letter-spacing:1px