最近在学习ZYNQ中嵌入式部分,由于之前已经写了很久的Verilog代码,脑海中还是并行处理的概念,对于程序语言这种顺序执行,有点不习惯,同时也有好几年没有写C语言了(虽然上学的时候考取了二级C的证书,但是现在连指针,结构体基本上都忘光了)。所以重新学习一遍C语言,笔者看的书是《C程序设计语言》(The C Programming Language)。有些想法很基础,但是同样重要。
C语言中基本数据类型长度2021-12-15于无锡,这同样是重学C语言的第一篇笔记!
C标准中并没有具体给出规定基本的变量类型应该是多少字节数,在《C程序设计语言》这本书中指出这取决于具体的机器。实际上这应该于机器、OS、编译器有关。
所以int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):
- sizeof(short int)<=sizeof(int)
- sizeof(int)<=sizeof(long int)
- short int至少应为16位(2字节)
- long int 至少应为32位(4字节)
这里笔者实际编写了一段代码来验证一下。
#include "stdio.h"
int main(void)
{
int a = 0,b = 0,c = 0,
d = 0,e = 0,f = 0,
g = 0,h = 0,i = 0,
j = 0,k = 0,l = 0,
m = 0,n = 0;
a = sizeof(int );
b = sizeof(float );
c = sizeof(double );
d = sizeof(char );
e = sizeof(short );
f = sizeof(short int );
g = sizeof(long );
h = sizeof(long int );
i = sizeof(long long );
j = sizeof(unsigned int );
k = sizeof(unsigned short );
l = sizeof(unsigned long );
m = sizeof(unsigned char );
n = sizeof(unsigned long long);
printf("int = %drn",a*8);
printf("float = %drn",b*8);
printf("double = %drn",c*8);
printf("char = %drn",d*8);
printf("short = %drn",e*8);
printf("short int = %drn",f*8);
printf("long = %drn",g*8);
printf("long int = %drn",h*8);
printf("long long = %drn",i*8);
printf("unsigned int = %drn",j*8);
printf("unsigned short = %drn",k*8);
printf("unsigned long = %drn",l*8);
printf("unsigned char = %drn",m*8);
printf("unsigned long long = %drn",n*8);
return 0;
}
笔者使用的操作系统是Window10,C语言编译器-MingGW-w64。



