为什么在大型项目中定义自定义数据类型是好的做法
Why it is good practice to define custom datatypes in larger projects
请帮助我了解在某些项目中定义 C 类型的原因。
在我现在的公司里,我发现有人定义的类型等同于 <stdint.h>
中已经定义的类型。
这种方法使得将 3party 代码集成到项目中变得更加困难,并且使程序员的工作更加令人沮丧。
但我也看到一些项目,比如 gnome,也是这样做的。例如有 gchar、gsize 和 gint32。
因为我看不出有任何理由采用这种方法,所以恳请解释。
<stdint.h>
不够的原因是什么。
这不是好的做法。它只会导致兼容性和可移植性降低。我看不出有任何理由应该这样做。 stdint.h
的存在是为了避免这种情况。
<stdint.h>
在 C99 中被标准化。也许代码库早于 <stdint.h>
,或者它需要在没有它的平台上编译。当没有可移植的固定大小 typedef 时,在 C89 和 K&R C 中这是一件非常常见的事情。如果现代项目仍然旨在在 decades-old 平台上进行编译,那么即使是现代项目也可能会保留这些兼容性垫片。
In my current company I found that someone made definitions of types that are equivalent of those that are already defined in <stdint.h>
.
如果您的代码库以 C99 或更高版本为目标,则没有必要。
请帮助我了解在某些项目中定义 C 类型的原因。
在我现在的公司里,我发现有人定义的类型等同于 <stdint.h>
中已经定义的类型。
这种方法使得将 3party 代码集成到项目中变得更加困难,并且使程序员的工作更加令人沮丧。
但我也看到一些项目,比如 gnome,也是这样做的。例如有 gchar、gsize 和 gint32。
因为我看不出有任何理由采用这种方法,所以恳请解释。
<stdint.h>
不够的原因是什么。
这不是好的做法。它只会导致兼容性和可移植性降低。我看不出有任何理由应该这样做。 stdint.h
的存在是为了避免这种情况。
<stdint.h>
在 C99 中被标准化。也许代码库早于 <stdint.h>
,或者它需要在没有它的平台上编译。当没有可移植的固定大小 typedef 时,在 C89 和 K&R C 中这是一件非常常见的事情。如果现代项目仍然旨在在 decades-old 平台上进行编译,那么即使是现代项目也可能会保留这些兼容性垫片。
In my current company I found that someone made definitions of types that are equivalent of those that are already defined in
<stdint.h>
.
如果您的代码库以 C99 或更高版本为目标,则没有必要。