我正在使用大型物理包Geant4来运行模拟。在该语言中定义了许多typedef,并在整个包中使用。
typedef double G4double;
typedef float G4float;
typedef int G4int;
typedef bool G4bool;
typedef long G4long;
我理解使用typedef将数字类型公开为特定于域的类型,因为这样可以提高可读性并允许在以后更改typedef(如果需要)。但是,在这种情况下,typedef非常广泛,不能用于此目的。
我还听说过typedef用于确保每种类型的一致比特大小,因为标准不保证sizeof(int)
。在这种情况下不能这样,因为这些typedef始终存在,而不是在检查相关类型的大小后由脚本生成。
我可能还缺少哪些其他目的?
答案 0 :(得分:0)
有些库喜欢这样做以保持代码内的一致性。他们使用的所有类型(甚至原语)都以G4
开头。
理论上,如果某种原始类型的大小导致问题,您可以在特定平台上重新定义这些。
就个人而言,我从未听说有人需要这样做。如果需要特定尺寸,通常首先使用它们。但这并不意味着它没有发生。
答案 1 :(得分:0)
我不可能说明为什么这个特定的图书馆会这样做。但是,我在我的库中做了类似的事情,我可以给出一些原因,其中一些是你已经提到的:
xintxx_t
类型浮动的情况下增强跨平台可移植性。typedef float MyLibraryFloat;
或typedef double MyLibraryFloat;
。typedef
那么简单。我认为最好的理由是第二个原因。如果您正在处理类型可能会根据编译器设置更改的情况,那么它绝对是最有用的。然而,第一种是常见的,特别是在较旧的C程序中。 OpenGL / GLUT为尺寸安全提供类型抽象。