首页 > 解决方案 > 如果在 C++ 中定义了类型,是否可以在预处理器时检测到?

问题描述

看起来在 GCC 历史的某个点上,类型ulong被定义为unsigned long long,但这会在编译器之间造成一些冲突,因为我将项目传递给其他编译器尚未ulong定义的编译器(如 Visual C++)。这是我想做的一个例子:

#ifndef ulong
typedef unsigned long long ulong;
#endif

但这永远不会奏效,因为这不是有效的方式#ifdef。你会怎么做?如何以最短的方式做到这一点?

标签: c++c-preprocessorpreprocessor

解决方案


对于您的问题,您可以直接编写typedef unsigned long ulong;而不进行任何预处理,因为您可以重复 typedef(在任何 C++ 中,但如果您使用 C,则只能从 C11 开始)。

我建议根本不要ulong在你的代码中使用,因为它只是为了与某些系统兼容而提供的,而不是标准的 C 或 C++。unsigned long更容易理解,写起来也不难

作为参考,它在<sys/types.h>(asunsigned long和 not中定义unsigned long long,但它们可以是相同的大小)


推荐阅读