【发布时间】:2016-04-25 00:50:26
【问题描述】:
对于每个处理器(Cortex M、Cortex 5),编译器必须知道与unsigned char、integer、short、......相关的数据大小是多少。
请你帮我理解这个选择是怎么做的?
【问题讨论】:
-
编译器里面有个源文件,里面有个表格,粗略的说。
-
您基本上通过指定要编译的架构来告诉编译器。这将它指向头文件等定义这些东西。
-
有些人告诉编译器他们的选择,编译器的作者或将编译器移植到该架构的人。等等。很多编译器特定而不是体系结构特定,并且可以随时随编译器的任何新版本而变化,或者某些编译器甚至可能具有命令行选项来改变这些定义。
-
如果您在那里体验了世界 (x86) 中 16 位到 32 位的变化,那么您会看到 int 从 16 位变为 32 位。但是 unsigned long 是 32 位的,所以很多人采用 unsigned long 来获得一致的 32 位变量,该变量可以跨 16 位和 32 位编译器移植。我们仍处于从 32 位到 64 位的转换中,int 没有改变,但 long 改变了,所有使用 unsigned long 来避免改变的代码现在都被改变了。 stdint 试图解决这个问题,但这里再次有人制作了该文件以匹配编译器
-
编译器和 stdint 头文件必须并行维护。 stdint 基本上是一种解决您可能遇到的问题的技巧。请注意,术语字节并不意味着 8 位,9 位在人们使用八进制时更有意义。没有规定一个字节必须是 8 位(从一种架构到另一个架构),也没有规定 char 必须是一个字节,也没有规定 int 必须是寄存器的大小或地址总线的大小。这是你作为程序员的工作,检查你的代码是否适合平台或使用习惯,碰巧更便携
标签: c types compiler-construction arm processor