‘壹’ C语言数据类型所占字节是和运行的机器位数有关还是编译器有关
1)C语言一般指的是ANSI C的标准,对应的处理器分别是32位和64位的。
2)类型分为内置类型和自定义类型(非内置类型)
内置类型指的是无需声明就可使用的类型,比如char,double,int等。
自定义类型指的是使用前必须声明的,如struct StructName{};结构类型,int a[5];数组类型以及enum Color{};枚举类型等。未经声明的类型不可使用
3)ANSI C只对内置类型的大小进行了规范:
char |double| folat |int |long int| pointer
64bits 1 8 4 4 8 8
32bits 1 8 4 4 4 4
从上表可以看出,对于前三者,大小是统一的,只有long int 和pointer(指针)在不同的机器上占用了不同的大小。他们的规则是,long int和pointer的大小等于机器位长(8位一个字节).最后说明一点,unsigned的关键字和类型组合和该类型的大小相同,因为有符号和无符号只对编译器有效,机器对他一无所知。
‘贰’ 请问编程语法规则,是不是根据不同编译器来定的
不,一个语言的语法是早就确定好的,它有一个统一标准——例如 ANSI C。
不同编译器可能有些许不同,比如有的编译器a=b=c结果很可能不一样(所以我们很少这么用
但是大体上,一个语言的编译器得出的结果是一样的,是根据语法规则做出编译器而非编译器确定语法规则。
zhengshu a=0,编译器肯定不认,理由是没有这个type;但是你可以通过typedef自定义任意的类型。
int是一种type,而type varlist;是声明变量的语法(int a; char b;)
你写了int a=0;那么这时编译器做的就是在内存中开出一个能存int数据的空间,然后把0给填进去,再记录下这块内存的地址,并记住这个地址叫做a。至于分析代码什么的,就是编译器的事情了。
——以上。
‘叁’ C语言之初还有很多不统一的版本,没有标准规范,另外还有几个元老级比C语言还早的同行,怎么创造语言
语言是依赖于编译器的。当你写出了一个全新的编译器,你就发明了一种新的计算机语言。如果你想制作自己的编译器判空,需要学习编译原理(编译原理我还没学,没法跟你讲)这里简单介绍一下这些语言是怎么来的以及编译器是如何工作的编译器本身也是可执行文件,它的工作是遵循一定规则,将代码转化为二进制的可执行文件。如果一些编橡搭译器遵循相同的转化规则,那么即使细节上有所不同,同样的代码也在这些编译器上都能生成相同功能的可执行文件,这样就可以说它们是使用同一种语言的编译器。C标准就是这种规则的标准规范,也就是C语言的标准规范,可以方便代码移植和交流。没有C标准的时候,可能自己抄了别人的代码,别人运行得好好的,结果自己这里一堆bug。最初的语言是机器语言,用二进制编写,可以直接写出可执行文件,不需要编译器。后来因为机器语言太难记忆,太难阅读,于是汇编语言被发明出来。汇编语言是将机器语言的指令换成一些容易辨识和记忆的符号的语言,汇编语言的编译器是用机器语言写的,称为汇编器。汇编器工作是将那些符号替换成二进制的指令,于是就生成了可执行文件。最早的c语言编译器是用汇编语言写的,它将c语言代码转化为汇编代码,再将汇编代码转化为可执行文件。后来的c语言编译器都是用先前的c语言编译器编写的。后来的很多语言的编译器也都是用c语言写出来的。现在很少人直接使用编译器,都是使用将写代码和编译功能,以及其它功能集于一体的集成开发环境(IDE)如果你只是想简单地替换一些符号,可以专门写一个程序,用于将代码文件的句号换成分号;进一步,可以集成文本编辑功能,在程序里面写完就转化为c语言的代码;更进一步,设置一个按钮,链接编译器,快捷地将转化后的梁冲拿代码编译。你也可以使用EditPlus这样的工具实现后两个功能
‘肆’ C语言和编译器的关系
c语言,只是一个程序设计语言。不是理论,不是思想,不是体系结构。只是语言。
C语言的语法不一致并不是编译器导致的。而是语言自然发展导致的。编译器只是支持某种标准的c语言。
并且c语言现在也有标准了,ansi c。不同语法的问题可以不用关心。因为你基本上接触不到另外一种语法。而且越新的编译器,支持越好。
‘伍’ C语言中:a+++b是什么意思
就近原则,与编译器无关。
要说在c语言中这充其量只能算作是“伪代码”。
在vb、pascal等程序设计语言中,<>是“不等于”的意思。
在c中,“不等于”的关系应表示为“!=”
if(a
!=
b+c)
printf("a不等于b+c ");
else
printf("a等于b+c ");
(5)c语言的规则是由编译器决定吗扩展阅读:
C语言的运算符主要用于构成表达式,同一个符号在不同的表达式中,其作用并不一致。下面按计算的优先顺序,分别说明不同作用的表达式。需要特别指出,在C语言标准中,并没有结合性的说法。
相同优先级运算符,从左至右依次运算。注意后缀运算优先级高于前缀。因此++i++应解释为++(i++)。而与或非的运算优先级都不一样,因此a && b || b && c解释为(a && b) || (b && c),合理使用优先级可以极大简化表达式。