在iar中同一个编译器不同工程extern 对象在.h里面定义为什么不能声明16位和8位整形
时间: 2024-03-30 21:35:00 浏览: 50
在同一个编译器环境下,不同工程之间可能使用不同的编译选项或者预定义宏,这些因素可能会影响整数类型的大小和表现方式。因此,为了确保在不同工程之间共享变量时能够正常工作,需要在 .h 文件中声明 extern 对象时,使用通用的整数类型,而不是特定的整数类型,例如 uint8_t 或 uint16_t。
使用通用的整数类型,例如 int 或 unsigned int,可以确保在不同工程中共享的变量能够正常工作,并避免编译错误或者运行错误。如果需要使用特定的整数类型,可以在代码中进行类型转换,以确保变量的正确性。
相关问题
在iar中同一个软件不同工程extern 对象在.h里面定义一个可以一个为什么不能声明16位和8位整形
在 IAR 中,不同工程间共享变量时,需要在 .h 文件中声明该变量,但是在声明时不能使用特定的整数类型(例如 uint8_t 或 uint16_t)。这是因为不同工程中使用的编译器可能存在差异,导致特定的整数类型在不同工程中的大小和表现方式不同,所以在声明时需要使用通用的整数类型,例如 int 或 unsigned int。
如果你在声明 extern 对象时使用了特定的整数类型,那么在不同工程中使用该变量时可能会导致编译错误或者运行错误。因此,在声明 extern 对象时,应该使用通用的整数类型,并根据需要在代码中进行类型转换。这样可以确保在不同工程中共享的变量能够正常工作。
iar中extern 对象在.h里面定义为什么不能声明16位和8位整形
iar中与其他编译器一样,extern对象在头文件(.h文件)中定义时,也不能声明为16位或8位整型。这是因为C语言规定,变量的大小必须是一个存储单元的整数倍,比如char类型占用1个存储单元,short类型占用2个存储单元,int类型占用4个存储单元等。
如果在头文件中定义一个16位或8位的extern对象,编译器会自动将其对齐到一个存储单元的整数倍,如果实际的存储单元大小小于声明的变量大小,就会导致变量访问越界,从而产生不可预期的结果。因此,为了避免这种情况的发生,我们通常在头文件中定义extern对象时,会使用较为通用的数据类型,比如int或者long等,以确保代码的正确性和可移植性。
阅读全文