网站LOGO
公爵书房 | 技术分享
页面加载中
10月4日
网站LOGO 公爵书房 | 技术分享
以指键之轻,承载知识之重
菜单
  • 公爵书房 | 技术分享
    以指键之轻,承载知识之重
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    学习笔记第七章 程序结构
    点击复制本页地址
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。

    学习笔记第七章 程序结构

    公爵 · 原创 ·
    笔记 · 学习笔记C语言程序结构
    共 2581 字 · 约 2 分钟 · 13
    本文最后更新于2023年09月02日,已经过了31天没有更新,若内容或图片失效,请留言反馈

    7.1 全局变量

    全局变量初始化

    • 默认初始化为0,指针会得到NULL
    • 尽量不要使用全局变量来在函数间传递参数和结果

    7.2 静态本地变量

    • static
    • 使用全局变量和静态本地变量的函数是线程不安全的

    7.3 编译预处理和宏

    编译预处理指令

    • #开头的是编译预处理指令
    • 它们不是c语言的成分,但是c语言程序离不开它们
    • #define 用来定义一个宏,原始的文本替换
    • Example 01:
    #include <stdio.h> 
    //const double PI = 3.14159; 
    #define PI 3.14159
    int main(){    
       printf("%f\n",2*PI);      
       return 0;
    }
    • Example 02:
    #include <stdio.h> 
    //const double PI = 3.14159; 
    #define PI 3.14159
    #define PI2 2*PI  // PI * 2
    #define PRT printf("%f ",PI); \
            printf("%f\n",PI2)
    int main(){
        //    printf("%f\n",PI);
        //    printf("%f\n",PI2);
            PRT;
            return 0;
        }

    define

    • 有值的宏:参考上面 Example 02
    • 没有值的宏:#define \_DEBUG // 这类宏适用于条件编译,后面有其他的编译预处理指令来检查这个宏是否已经被定义过了

    预定义的宏

    • LINE
    • FILE
    • DATE
    • TIME
    • STDC
    • Example 01:
    #include <stdio.h> 
    int main(){
        printf("%s:%d\n",__FILE__,__LINE__);
        printf("%s:%s\n",__DATE__,__LINE__);
        return 0;
    }

    像函数的宏

    • #define cube(x) ( (x) * (x) * (x) )
    • 宏可以带参数
    • Example 01:
    #include <stdio.h> 
    #define cube(x) ((x)*(x)*(x))     
    int main(int argc,char const *argv[]){
        int i;
        scanf("%d",&i);
        printf("%d\n",cube(i));
        return 0;
    }
    • 带参数的宏的原则:

      • 一切都要括号

        • 整个值要括号
        • 参数出现的每个地方都要括号
      • #define RADTODEG(x) ( (x) * 57.29578 )
    • 宏可以带多个参数:

      • #define MIN(a,b) ((a)>(b)?(b):(a))
    • 宏也可以组合(嵌套)使用其他宏

    7.4 大程序结构

    多个 .c 文件

    • 在 Dev C++ 中新建一个项目,然后把几个源代码文件加入进去,然后编译和构建运行即可。
     ></cat_post_image><ul><li><p>编译单元</p><ul><li>一个 .c 文件是一个编译单元</li><li>编译器每次编译只处理一个编译单元</li></ul></li><li><p>引入头文件</p><ul><li>把函数原型放在一个头文件(以 .h 结尾)中,在需要调用这个函数的源代码文件( .c 文件)中 #include 这个头文件,就可以让编译器在编译的时候知道函数的原型。</li></ul></li></ul><cat_post_image><img src= >
    • 编译单元

      • 一个 .c 文件是一个编译单元
      • 编译器每次编译只处理一个编译单元
    • 引入头文件

      • 把函数原型放在一个头文件(以 .h 结尾)中,在需要调用这个函数的源代码文件( .c 文件)中 #include 这个头文件,就可以让编译器在编译的时候知道函数的原型。

    声明

    在 .h 中添加 extern int gAll; 就能使用 gAll 了

    • int i; //是变量的定义
    • extern int i; //是变量的声明
    • 声明不产生代码,定义产生代码
    • 声明包括:

      • 函数原型
      • 变量声明
      • 结构声明
      • 宏声明
      • 枚举声明
      • 类型声明
      • inline 声明
    • 只有声明才能放在头文件中

    标准头文件结构

    • 条件编译指令
    • #ifndef _ MAX_H _ //如果没有定义
    • #define _ MAX_H _ //则定义
    • #endif
    • 避免了重复引用的情况
     ></cat_post_image> </div> <div class=
    声明:本文由 公爵(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    发一条! 发一条!
    博客logo 公爵书房 | 技术分享 以指键之轻,承载知识之重 51统计 百度统计
    MOEICP 萌ICP备20226257号 ICP 赣ICP备2022001242号-1 ICP 闽公网安备35020502000606号 又拍云 本站由又拍云提供CDN加速/云存储服务

    🕛

    本站已运行 1 年 257 天 7 小时 10 分

    🌳

    自豪地使用 Typecho 建站,并搭配 MyLife 主题
    公爵书房 | 技术分享. © 2022 ~ 2023.
    网站logo

    公爵书房 | 技术分享 以指键之轻,承载知识之重
     
     
     
     
    壁纸