C 不同微控制器中的变量大小是否相同?

C 不同微控制器中的变量大小是否相同?,c,embedded,microcontroller,avr,microchip,C,Embedded,Microcontroller,Avr,Microchip,如果我们在PIC微控制器中定义一个变量“整数”,那么当我在Atmel微控制器中定义相同的“int”变量时,它的大小是否相同?或者是不同的尺寸 这个问题在嵌入式系统面试中,答案应该是什么 我有点困惑 它依赖于微控制器还是编程语言? 在所有不同的编程语言中,同一类型的变量(如integer)的大小是否相同 这不是同一个问题,因为嵌入式控制器有点不同。这取决于32位或64位的体系结构。 在32位系统上,整数将以32位编码: 对于有符号整数32位: 值介于-2147483648和2147483647之间

如果我们在PIC微控制器中定义一个变量“整数”,那么当我在Atmel微控制器中定义相同的“int”变量时,它的大小是否相同?或者是不同的尺寸

这个问题在嵌入式系统面试中,答案应该是什么

我有点困惑

它依赖于微控制器还是编程语言? 在所有不同的编程语言中,同一类型的变量(如integer)的大小是否相同


这不是同一个问题,因为嵌入式控制器有点不同。

这取决于32位或64位的体系结构。 在32位系统上,整数将以32位编码:

对于有符号整数32位:

值介于-2147483648和2147483647之间

在64位系统上,它将是64:

对于有符号整数64位:介于-9223372036854775808和9223372036854775807之间的值


因此,要回答您的问题,整数可以有不同的大小,这取决于您使用的体系结构。

它取决于体系结构32位或64位。 在32位系统上,整数将以32位编码:

对于有符号整数32位:

值介于-2147483648和2147483647之间

在64位系统上,它将是64:

对于有符号整数64位:介于-9223372036854775808和9223372036854775807之间的值


因此,要回答您的问题,根据您使用的体系结构,integer可以有不同的大小。

问题在于,标准C类型往往会因实现而异。使用stdint.h中的类型将允许您指定所需的位数。

问题在于,标准C类型往往会因实现而异。使用stdint.h中的类型将允许您指定所需的位数。

提示:如果您的代码假设特定类型具有特定大小,则可以在编译期间验证此假设:

#define C_ASSERT(cond) char c_assert_var_##__LINE__[(cond) ? 1 : -1]
C_ASSERT(sizeof(int) == 4);
在编译期间,这将生成以下代码:

char c_assert_var_350[(sizeof(int) == 4) ? 1 : -1];

如果sizeof(int)!=4

提示:如果您的代码假设特定类型具有特定大小,则可以在编译期间验证此假设:

#define C_ASSERT(cond) char c_assert_var_##__LINE__[(cond) ? 1 : -1]
C_ASSERT(sizeof(int) == 4);
在编译期间,这将生成以下代码:

char c_assert_var_350[(sizeof(int) == 4) ? 1 : -1];

如果sizeof(int)!=4

面试问题的答案应该是:

可能,在重要的地方,应该使用stdint.h中定义的类型,或者参考编译器文档或检查limits.h中的定义

面试官不太可能要求回答“是/否”,在任何情况下,面试官都可能不喜欢这种简洁的回答——这些问题的目的是让你说话,直到你对自己或你的能力和知识说了一些有用或有趣的话。他可能在寻找的是,您是否知道C中的标准类型大小是编译器/体系结构的依赖关系,以及您可能如何处理可移植代码中的潜在可变性

一张图片和另一张图片之间或一张Atmel和另一张图片之间的int很可能不同,更不用说图片和Atmel之间了。例如,Atmel AVR32肯定不同于8位AVR,类似地,基于MIPS的PIC32也不同于“经典”PIC

此外,内置类型的大小严格来说是一个“编译器实现”问题,因此同一处理器的两个不同编译器可能会有所不同(尽管这是极不可能的,因为没有编译器供应商会故意这么做!)


除C和C++之外的语言(当然还有汇编)在小型微控制器上不常见,因为这些是具有最低运行时环境要求的系统级语言,但是类型的大小当然可以根据语言定义而变化。p> 面试问题的答案应该是:

可能,在重要的地方,应该使用stdint.h中定义的类型,或者参考编译器文档或检查limits.h中的定义

面试官不太可能要求回答“是/否”,在任何情况下,面试官都可能不喜欢这种简洁的回答——这些问题的目的是让你说话,直到你对自己或你的能力和知识说了一些有用或有趣的话。他可能在寻找的是,您是否知道C中的标准类型大小是编译器/体系结构的依赖关系,以及您可能如何处理可移植代码中的潜在可变性

一张图片和另一张图片之间或一张Atmel和另一张图片之间的int很可能不同,更不用说图片和Atmel之间了。例如,Atmel AVR32肯定不同于8位AVR,类似地,基于MIPS的PIC32也不同于“经典”PIC

此外,内置类型的大小严格来说是一个“编译器实现”问题,因此同一处理器的两个不同编译器可能会有所不同(尽管这是极不可能的,因为没有编译器供应商会故意这么做!)


除C和C++之外的语言(当然还有汇编)在小型微控制器上不常见,因为这些是具有最低运行时环境要求的系统级语言,但是类型的大小当然可以根据语言定义而变化。p> 这取决于很多事情,我既不能说是也不能说不是,但我的答案更多的是不是

int
保证为16位。然而,在后一种体系结构中,
int
是32位的数字,它不违反任何规则。据我所知,Atmels 8位微控制器
int
中的16位是什么,不确定PIC

不管怎样,我的建议是对我们