C语言

来源:互联网 发布:开一家小型咖啡屋 知乎 编辑:程序博客网 时间:2024/06/05 02:34

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。[1] 
中文名
C语言
外文名
The C Programming Language
类    别
计算机程序设计语言
创始人
Dennis MacAlistair Ritchie
创始时间
1972年
发    源
BCPL语言
主要编译器
Clang、GCC、MSVC、Turbo C等
启发语言
B语言、汇编、ALGOL68
操作系统
多平台



语言特点

    基本特性



      1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。[10] 
      2、结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。[10] 
      4、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。[10] 
      5、使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。[11] 

    特有特点

      1. C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
      2. C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
      3. 不同的变量类型可以用结构体(struct)组合在一起。
      4. 只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
      5. 部份的变量类型可以转换,例如整型和字符型变量。
      6. 通过指针(pointer),C语言可以容易的对存储器进行低级控制。
      7. 预编译处理(preprocessor)让C语言的编译更具有弹性。
    • 关键字

        关键字又称为保留字,就是已被C语言本身使用,不能作其它用途使用的字。例如关键字不能用作变量名、函数名等标识符
        由ISO标准定义的C语言关键字共32个:
        auto double int struct break else long switch
        case enum register typedef char extern return union
        const float short unsigned continue for signed void
        default goto sizeof volatile do if while static inline
        restrict _Bool _Complex _Imaginary _Generic[21] 
        基本数据类型
        void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)
        char:字符型类型数据,属于整型数据的一种。(K&R时期引入)
        int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)
        float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
        double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
        _Bool:布尔型(C99标准新增)
        _Complex:复数的基本类型(C99标准新增)
        _Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增)
        _Generic:提供重载的接口入口(C11标准新增)
        类型修饰关键字
        short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
        long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
        long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
        signed:修饰整型数据,有符号数据类型。(C89标准新增)
        unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
        restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)
        复杂类型关键字
        struct:结构体声明。(K&R时期引入)
        union:联合体声明。(K&R时期引入)
        enum:枚举声明。(C89标准新增)
        typedef:声明类型别名。(K&R时期引入)
        sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)
        inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
        存储级别关键字
        auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配。与static相反。当变量未指定时默认为auto。(K&R时期引入)
        static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。(K&R时期引入)
        register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。(K&R时期引入)
        extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(K&R时期引入)
        const:指定变量不可被当前线程改变(但有可能被系统或其他线程改变)。(C89标准新增)
        volatile:指定变量的值有可能会被系统或其他线程改变,强制编译器每次从内存中取得该变量的值,阻止编译器把该变量优化成寄存器变量。(C89标准新增)
      流程控制关键字
        跳转结构
        return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。(K&R时期引入)
        continue:结束当前循环,开始下一轮循环。(K&R时期引入)
        break:跳出当前循环或switch结构。(K&R时期引入)
        goto:无条件跳转语句。(K&R时期引入)
        分支结构
        if:条件语句,后面不需要放分号。(K&R时期引入)
        else:条件语句否定分支(与if连用)。(K&R时期引入)
        switch:开关语句(多重分支语句)。(K&R时期引入)
        case:开关语句中的分支标记,与switch连用。(K&R时期引入)
        default:开关语句中的“其他”分支,可选。(K&R时期引入)
      编译
          #define 预编译宏
          #if 表达式 #else if 表达式 #else #endif 条件编译
          #ifdef 宏 #else #endif 条件编译
          #ifndef 宏 #else #endif 条件编译与条件编译

      运算符号

        比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。
        运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。[27] 
      ()、 []、 -> 、 .、!、 ++、 --圆括号、方括号、指针、成员、逻辑非、自加、自减++ 、 -- 、 * 、 & 、 ~ 、!单目运算符+、 - 、 sizeof、(cast)
      * 、 / 、%算术运算符+ 、 -算术运算符<< 、 >>位运算符< 、 <= 、 > 、 >=关系运算符== 、!=关系运算符号&位与^位异或|位或&&逻辑与||逻辑或? 、:条件运算符/= 、%= 、 &= 、 |= 、 ^=赋值运算符= 、 += 、 -= 、 *= 、
      ,顺序运算符
    • 经典错误

      void main()的用法并不是任何标准制定的。 C语言标准语法是int main,任何实现都必须支持int main(void) { /* ... */ }和int main(int argc, char* argv[]) { /* ... */ }。 [9] 
      类似于a+=a++;或者(i++)+(i++)+(i++)属于未定义行为,并不是说c语言中还未定义这种行为,它早有定论,它的结果取决于编译器实现,不要写这样的代码!


      ——————————————————————————————————————

      学习计算机,从何入手? 

      以懂得计算机为目标的学习:

      1.《程序设计,优先方式》
      2.《算法设计,优先方式》

      3.《硬件开发,优先方式》

      ——————————————————————————————————


      三种程序设计语言:


       机器语言
       直接使用二进制编写程序的语言


       汇编语言
       引入了助记词,用符号代替机器指令的语言

       高级语言
       接近自然语言和数学语言之语法的语言


      我们要学的—— C 语言
       1969年,ken和dmr梦想能遨游宇宙
       ken在PDP-7小型机上设计了“Space Travel”电子游戏,
      因为使用的免费机器没有操作系统,就先给PDP-7做
      个操作系统,称为“UNIX”
       用汇编写UNIX太慢,dmr设计了新的高级语言,称为
      “C语言”
       1983年,因为UNIX和C语言的巨大成功, ken和dmr
      共同获得当年度的计算机界最高奖——图灵奖
       UNIX和C语言堪称计算机世界里两大神器。


      C语言
       是一种高级语言
       并不“高级”,只是相对低级语言在一个高的级别上进行编程
       实际上是一种介于高级语言和低级语言之间的语言
       历史悠久,战勋卓著
       诞生于20世纪70年代初,成熟于80年代,进入了标准化
       历史上,和现在,很多重量级软件都是用C语言写的
       21世纪,霸占排行榜榜首,已经很久了
       上天入地,无所不能
       几乎没有不能用C语言实现的软件,没有不支持C语言的系统
       很多流行语言、新生语言都借鉴了它的思想、语法
       从C++,到Java,再到C#

      0 0
      原创粉丝点击