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