我正在使用一个大型的物理软件包Geant4来运行模拟。在该语言中定义了许多typedefs,并在整个包中独占使用。
typedef double G4double;
typedef float G4float;
typedef int G4int;
typedef bool G4bool;
typedef long G4long;我理解如何使用typedefs将数值类型公开为特定于域的类型,因为这提高了可读性,并允许在以后需要时更改typedefs。然而,在这种情况下,typedefs太过宽泛,以至于它们不能达到这个目的。
我还听说typedefs被用来确保每种类型的位大小一致,因为sizeof(int)不受标准的保证。在这种情况下,这是不可能的,因为这些typedefs总是存在,而不是由脚本在检查相关类型的大小后生成。
我还错过了什么其他的目的?
发布于 2016-10-14 03:05:45
有些库喜欢这样做,以保持代码的一致性。它们使用的所有类型(甚至基元类型)都以G4开头。
理论上,如果某个原语类型的大小导致问题,您可以在特定平台上重新定义这些类型。
就我个人而言,我从来没有听说过有人需要这样做。在需要特定大小的地方,通常首先使用它们。但这并不意味着它没有发生。
发布于 2016-10-14 03:07:04
我不可能说明为什么这个特定的库会这样做。然而,我已经在我的库中做了类似的事情,我可以给出几个原因,其中一些您已经提到:
xintxx_t类型到处浮动。typedef float MyLibraryFloat;或typedef double MyLibraryFloat;。typedef那么简单。我认为最好的原因是第二个。如果您正在处理类型可能会根据编译器设置而更改的情况,那么它绝对是最有用的。但是,第一种情况很常见,尤其是在较旧的C程序中。OpenGL/GLUT为了大小安全对类型进行了抽象。
https://stackoverflow.com/questions/40028729
复制相似问题