gcc, width of long int on different architectures

和自甴很熟 提交于 2019-12-07 05:31:57

问题


On 64-bit architectures, long int, according to gcc is at least an int64_t. On 32-bit, long int is at least int32_t. With Microsoft compilers, long is always an int32_t, regardless of 32/64-bit. Is there any way to:

  1. Force gcc to treat long as a int64_t, on 32bit? (for ease of testing)
  2. Force gcc to treat long as a int32_t on 64bit? (for compliance with MS's compiler).

回答1:


Don't do this - use standard types such as int32_t, uint32_t, int64_t, uint64_t, etc from <stdint.h> rather than trying to make assumptions about naked types such as long int or trying to bend the compiler to your will.

Note: The 64-bit model for any given platform (e.g. LP64 for most *nix platforms, Mac OS X, etc) is a given, so even if you could convince the compiler to use a different 64-bit model you would probably break any calls to system code, libraries, etc.




回答2:


This is why its generally much easier to use a set of typedefs that are defined per platform. It will really save you a lot of hassle when compiling on random-platform-with-random-compiler-47.4



来源:https://stackoverflow.com/questions/4244311/gcc-width-of-long-int-on-different-architectures

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!