zoukankan      html  css  js  c++  java
  • C语言关键字

    第一类:数据类型关键字

    A 基本数据类型

    关键字名称 作用
    void 声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果。
    char 字符型类型数据,属于整型数据的一种。
    int 整型数据,通常为编译器指定的机器字长。
    float 单精度浮点型数据,属于浮点数据的一种,小数点后保存6位。
    double 双精度浮点型数据,属于浮点数据的一种,比float保存的精度高,小数点后保存15/16位。

    B 类型修饰关键字

    关键字名称 作用
    short 修饰int,短整型数据,可省略被修饰的int。
    long 修饰int,长整形数据,可省略被修饰的int。
    signed 修饰整型数据,有符号数据类型。
    unsigned 修饰整型数据,无符号数据类型。

    C 复杂类型关键字

    关键字名称 作用
    struct 结构体声明。
    union 共用体声明。
    enum 枚举声明。
    typedef 声明类型别名。
    sizeof 得到特定类型或特定类型变量的大小。

    D 存储级别关键字

    关键字名称 作用
    auto 指定为自动变量,由编译器自动分配及释放。通常在栈上分配。
    static 指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。
    register 指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。
    extern 指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的。
    const 与volatile合称“cv特性“,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
    volatile 与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值。

    volatile关键字是一种类型修饰符,用它生命的类型变量不经过赋值也可以被某些编译器未知的因素更改。例如操作系统、硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,执行部件每次都会从该变量相应的内存单元中取出其值,从而可以提供对特殊地址的稳定访问

    第二类:流程控制关键字

    A 跳转结构

    关键字名称 作用
    return 用在函数体中,返回特定值(或者是void值,即不返回值)。
    continue 结束当前循环,开始下一轮循环。
    break 跳出当前循环或switch结构。
    goto 无条件跳转语句。

    B 分支结构

    关键字名称 作用
    if 条件语句。
    else 条件语句否定分支(与if连用)。
    switch 开关语句(多重分支语句)。
    case 开关语句中的分支标记。
    default 开关语句中的“其他”分治,可选。

    C循环结构

    关键字名称 作用
    for for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2…循环,其中2为循环条件。
    do do循环结构,do 1 while(2);的执行顺序是1->2->1…循环,2为循环条件。
    while while循环结构,while(1) 2;的执行顺序是1->2->1…循环,1为循环条件, 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

    以上是C89定义了32个关键词(keyword)

    1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字:inline, restrict, _Bool ,_Complex ,_Imaginary(注意bool 从来不是C语言的关键字)。

    关键字名称 作用
    _Bool bool类型变量, 等价于 unsigned char . 只有0和1
    _Complex 对于C99 标准定义,存在 float _Complex, double _Complex,long double _Complex 复数类型
    _Imaginary 虚数类型。_Complex 复数类型的虚部。例如 10.0i, 10.8if 等等。这个关键字在VS 上没有实现。其实我也觉得没有必要。和_Complex有重叠
    inline 内联函数,从C++中引入的概念。就是将小函数直接嵌入到代码中。C的代码损耗在于函数的进出栈。要是可以推荐用内联函数替代宏。宏能不用就不用。函数什么的时候不要加inline 需要加extern,定义的时候需要加inline
    restrict 这是很装逼的关键字用于编译器优化。关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。

    2011年12月8日,ISO发布C语言的新标准C11,该标准新增了7个C语言关键字:_Alignas ,_Alignof ,_Atomic, _Static_assert ,_Noreturn ,_Thread_local ,_Generic。

    关键字名称 作用
    _Alignas 内存对齐的操作符。需要和_Alignof配合使用,指定结构的对齐方式
    _Alignof 得到类型和变量的对齐方式
    _Atomic 原子操作, 原子锁。gcc 很早就支持
    _Static_assert 编译器期间断言,当 #if #error 搞完毕(预编译)之后,编译器断言。assert是运行时断言。用的时候看具体的需求
    _Noreturn 修饰函数,绝对不会有返回值。_Noreturn 声明的函数不会返回。引入此新的函数修饰符有两个目的:消除编译器对没有return的函数的警告。允许某种只针对不返回函数的优化
    _Thread_local _Thread_local是新的存储类修饰符,限定了变量不能在多线程之间共享
    _Generic 这个比较叼,C的泛函机制。 高级函数宏
  • 相关阅读:
    iOS 各种编译错误汇总
    Reveal查看任意app的高级技巧
    PCH in Xcode 6
    iOS开发之工具篇-20个可以帮你简化移动app开发流程的工具
    UICollectionViewController xcode6.1 自定义Cell
    Xcode6.1 Prefix.pch添加方式
    最近开始研究php的缓存技术,来个系统自带的OPcache
    今天练手了下mysqlbinlog,标记下
    写了个数组多个数组合并返回的是不重复的数组
    ngnix配置thinkphp5隐藏index.php的方法亲测有效
  • 原文地址:https://www.cnblogs.com/born2run/p/9581423.html
Copyright © 2011-2022 走看看