C 语言:20250708笔记

内容提要

  • C语言概述

  • 数据类型

  • 常量

  • 变量

C语言概述

计算机基础

计算机的组成

计算机组成

  • 计算机:能进行计算以及逻辑处理的设备

  • 硬件:组成计算机的物理部件。(内存条、CPU、硬盘..)

    开发中对于硬件的认知:

    硬件包括电子设备、单片机、集成电路和嵌入式系统。

  • 软件:计算机中运行的程序和数据。

    开发中对于软件的认知:

    软件分为系统软件(OS)、应用软件和编程工具(编译器)

计算机的六大部件

  • 中央处理器(CPU):控制 + 计算

  • 内存:临时存储运行时的数据。

  • 输入设备:向计算机输入数据(键盘、鼠标、扫码枪)

  • 输出设备:将计算机数据进行输出(显示器、打印机)

  • 外存储器:永久存储数据(硬盘)

  • 网络:数据传输与通信

计算机的工作原理

  • 存储程序:程序和数据存储在内存中

  • 程序控制:CPU按指令顺序执行

计算机的语法

  • 机器语言:二进制代码,直接控制硬件

  • 汇编语言:助记符形式,需要汇编器翻译

  • 高级语言:C/C++,Java,Python,PHP,C#,GO

C语言简史与特点

C语言的起源

  • 其前身是B语言;

  • B语言是美国贝尔实验室的 Ken Thompson(肯·汤普森)于1969年开发出来的,并且用B语言编写了初版的UNIX系统

  • 1972年美国贝尔实验室的Dennis Ritchie(丹尼斯·M·里奇)在B语言基础上开发的C语言.C语言提供了丰富的数据类型和标识符,使得程序的编写变得非常高效和方便。

  • 1973年初,C语言的主体完成。汤普森和里奇迫不及待地开始用它完全重写了UNIX。

C语言的标准

为了C语言健康发展下去,很多有识之士及美国国家标准协会(ANSI)于1982年成立了一个委员会以确定C语言的标准。

  • 1989 ANSI 发布了第一个完整的C语言标准,即C89。不过人们习惯性的称为 “ANSI C”

  • 1990年ISO(国际标准化组织一字不改的采纳了 C89,官方给出的名称为 ISO C90) 。

  • 1999年,C语言标准经过了一次修正和完善后,ISO发布了新版的C语言标准,简称” C99”。

  • 2018年6月份发布的 “C18”GNU C 标准 (标准C的扩展) ,进一步增强了语言的稳定性和功能性。

  • 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899:2011,简称为“C11”。

  • “C23”是最新的标准,预计将进一步扩展C语言的功能和性能。

  • 应用于Linux 系统,当然Linux也支持标准C,因为标准C是跨平台的。

嵌入式开发就是针对Linux系统的开发,而Linux系统是使用C语言开发的,所以从事嵌入式开发要使用C语言。

C语言特点

  • 简洁高效,支持底层硬件操作

  • 可移植性强,适合结构化编程

  • 生成代码质量高,执行速度快

C语言程序的开发过程(掌握)

开发的三个步骤

①编辑:编写源代码(.c文件,程序员完成)

②编译:将源代码文件转化为可执行的文件(编译器完成)

③运行:执行程序(操作系统加载)

C语言程序的编译过程

注意:本章节只是做一个简单的讲解,后续在深入!

上面提到的编译,实际上是分为了四个步骤:

1.预处理:处理宏和头文件以及注释等

2.编译:生成汇编代码

3.汇编:转换为机器码/二进制代码

4.链接:合并库文件和目标文件(二进制代码)

C 语言:20250708笔记_第1张图片

C 语言:20250708笔记_第2张图片

  • 测试代码:

     // 头文件包含  预处理的时候,会将stdio.h中的代码全部拷贝到当前文件
     #include 
     ​
     // 宏定义
     #define R 2
     #define PI 3.14
     ​
     int main()
     {
         printf("hello world!\n");
         
         // 计算圆的面积
         double area = PI * R * R; // 宏展开,double area = 3.14 * 2 * 2
         
         printf("%f\n", area);
     }

    编译的命令

    编译步骤 命令 文件类型 说明
    预处理 gcc -E *.c -o *.i *.c → *.i 生成的是C代码(文本)
    编译 gcc -S *.c -o *.s *.i → *.s 生成的是汇编代码(文本)
    汇编 gcc -c *.c -o *.o *.s → *.o 生成的是二进制代码(文本)
    链接 gcc *.c -o * 生成的是二进制代码

    C语言的基本结构

    一个简单的C语言程序

    功能:要求在控制台输出“hello world!”

    代码:

     #include 
     ​
     // 主函数:一个.c文件只能有一个main函数,这个函数是程序的入口
     int main()
     {
         // 向控制台输出hello world!
         printf("hello world!\n");
     ​
         return 0;
     }
     ​

    程序结构分析:

    • 注释:解释代码逻辑,写给程序员自己看,预处理阶段会被删除。

    • 预处理指令:程序中包含的某一文件内容(#include

    • 主函数:main函数是程序唯一的入口,一个文件中最多有1个,这个函数不能被其他函数调用,这是一个自动执行的函数,系统是通过这个函数的指针进行访问的。

    • 关于函数:

      • 函数头:(函数首部或者函数说明)

        说明函数类型,函数头由函数名和形参列表构成。

      • 函数体:

        包括变量说明和语句执行部分。

    • 函数调用语句:比如:printf()

    C语言编程规范要求

    C语言在编程的时候,需要遵循如下规范:

    • 常用的缩进格式(一般缩进2~4个字符,推荐缩进4个字符,我们Vim配置的是缩进4个字符,也就是一个Tab键

    • 要有足够的注释(添加必要的注释,使代码更好理解)

    • 要有合适的空行(一般预处理指令和函数之间,函数和函数之间,全局变量和函数之间...,加空行提高代码可读性,使代码结构清晰)

       
      
      #include 
       #include 
       ​
       #define PI 3.14
       #define R 2
       ​
       int fun()
       {
           printf("A\n");
       }
       ​
       int main(int argc,char *argv[])
       {
           printf("hello world!\n");
           fun();
           
           return 0;
       }
       ​
    • {}对齐(C和C++{}都需要独占一行,千万不要受Java影响)

      Java

       int fun() {
           ...
       }
      C/C++
      
       int fun()
       {
           ...
       }

    • 函数体内采用分层缩进和模块化的书写方式。

       int fun()
       {
           if(..)
           {
               for(..)
               {
                   printf("hello\n");
               }
           }
           
           if(..)
           {
               for(..)
               {
                   printf("hello\n");
               }
           }
       }

    • 不把多条语句写在程序的同一行上(最好的区分是,不要在同一行连续出现多个;,for循环(;;)除外)

       
      int main()
       {
           // 错误写法(不影响编译,但是影响阅读体验)
           printf("hello"); printf("hello"); printf("hello");
           
           // 错误写法(不影响编译,但是影响阅读体验)
           int a = 10; int b = 20;
           
           // 正确写法
           for (;;)
           {
               ...
           }
       }

    • 标识符命名要见名知意。

      int main()
       {
           // 创建3个变量,用来存储年龄、身高、体重
           
           // 错误演示(不影响编译,但是影响阅读体验)
           int a = 21;
           int b = 168;
           int c = 190;
           
           // 正确演示
           int age = 21;
           int height = 168;
           int weight = 190;
       }

    C语言程序的设计特点

    C语言程序在设计的时候,需要注意以下细节:

    • C程序有一个或多个函数组成,但有且仅有一个main函数;这个函数是程序的入口函数,可以置于任意位置,建议放在所有函数的最下面。

    • 程序中可以有预处理指令(#include、#define),预处理指令通常放在程序的最前面。

    • 每个语句以分号结尾:(注意:预处理,函数头,函数、分支语句、while和for语句后面不能添加分号,否则会报错)

    • 函数体由一对{}括起来,函数的{}不能省略。

    • 包含在/*..*/内,或者//..后面的文本为注释内容,在预处理阶段删除。

    • 一行可以写多个语句,一个语句可以写在多行上。

       int main()
       {
           // 一行可以写多个语句
           int a, b, c;
       ​
           // 一个语句写在多行上
           while(1)
           {
               ...
           }
       }
       // 格式化笔记中的代码:shift + tab

      C语言中的注释

      在C语言中,注释一般分为两类:单行注释和多行注释

      注释的作用:给代码添加解释说明性文字,提升代码的可读性,注释本身不参与编译,在预处理阶段会被删除。我们同时也可以使用注释屏蔽掉暂时不需要的代码。

      单行注释

      说明:单行注释使用双斜杠//..表示。我们一般用于变量、常量、函数调用语句等。

      语法:

       // 需要注释的内容

      范例: 

      // 预处理指令,引入系统的标准输入输出库
       #include 
       ​
       int main()
       {
           // 向控制台打印输出 hello world!
           printf("hell world!\n");
           
           return 0;
       }

      多行注释

      说明:多行注释使用双斜杠星花/*..*/表示。它可以占用一行,也可以占用多行,但不能嵌套。我们一般用于函数,文件头说明等。

      语法:

       
      /* 要注释的内容 */
       ​
       /*
          要注释
          的内容
       */
      范例:
      
       /*
          主函数
        */
       int main()
       {
           ...
       }

      注意:由多行注释衍生出一种更为细致的注释,我们称之为文档注释

      范例:

       /**
        * 主函数
        * @author 开发者
        * @param  参数1 说明
        * @param  参数2 说明
        * @return 返回值
        */
       int main()
       {
           ...
       }

你可能感兴趣的:(c语言,笔记,开发语言)