01-C语言概述

C语言概述

1.什么是C语言

C语言就是人和计算机交流的一种语言
语言是用来交流沟通的。有一方说,有另一方听,必须有两方参与,这是语言最重要的功能:

  • 说的一方传递信息,听的一方接收信息;
  • 说的一方下达指令,听的一方遵循命令做事情。

语言是人和人交流,C语言是人和机器交流。只是,人可以不听另外一个人,但是,计算机是无条件服从。
语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。
最早的时候使用的是机器语言(01001),后面发展为汇编语言,汇编语言相对于机器语言易懂一些,汇编语言依赖于寄存器,不同的机器可能没有寄存器。之后出现了高级语言
编译:将高级语言转换为计算机能够识别的二进制指令。

2.C语言特点

2.1优点

  • 代码量小
  • 执行速度快
  • 功能强大
  • 编程自由

2.2缺点

  • 写代码实现周期长
  • 可移植性差
  • 过于自由,经验不足易出错
  • 对平台库依赖较多

2.3C语言应用领域

C语言的应用极其广泛,从网站后台,到底层操作系统,从多媒体应用到大型网络游戏,均可使用C语言来开发:

  • C语言可以写网站后台程序
  • C语言可以专门针对某个主题写出功能强大的程序库
  • C语言可以写出大型游戏的引擎
  • C语言可以写出另一个语言来
  • C语言可以写操作系统和驱动程序,并且只能用C语言编写
  • 任何设备只要配置了微处理器,就都支持C语言。从微波炉到手机,都是由C语言技术来推动的

2.4C语言简洁

C语言仅有32个关键字,9种控制语句,34种运算符,却能完成无数的功能:
01-C语言概述
01-C语言概述
01-C语言概述

3.书写第一个C语言程序

3.1 Visual Studio基础使用

  • 使用Visual studio 2019集成开发环境,先创建项目,选择代码文件夹
  • 解决方案资源管理器管理代码
    01-C语言概述
  • 创建的代码放在项目中,在解决方案资源管理器中的源文件中创建.C文件,源文件右击-->添加-->新建项-->选择C++-->更改文件后缀-->添加
    01-C语言概述
    01-C语言概述
    书写第一个代码
// 预处理指令,在预编译时处理
// #include 包含stdio.h头文件
// stdio.h头文件包含了一些函数
// 两个//表示注释
// 符号与()结合,代表一个函数
// main() main函数也称作是主函数,整个程序中有且仅有一个main函数,程序从main函数开始执行
// int代表main函数结束之后的返回值类型,C语言中可以不写返回值,在C++中必须要写
// return代表结束这个函数,返回值,返回值的类型和函数定义时的返回值类型一致
// {}里面的是函数体,所有需要执行的代码必须写在{}中
// 每一条代码必须以分号(;)结尾
// printf是一个库函数,printf()就是函数调用
#include <stdio.h>   

int main()
{
	printf("Hello world\n");//打印到终端
	printf("Evan zhang");
	return 0;
}
  • 执行代码,ctrl+F5
    01-C语言概述

3.2 使用文本编辑器编写代码

  • C代码先编译后执行,首先将C代码保存,windows命令行界面下,默认是没有gcc编译器,我们需要配置一下环境。由于我们安装了Qt,Qt是一个集成开发环境,内部集成gcc编译器,配置一下环境变量即可使用gcc。
    01-C语言概述
  • 编译代码,安装Qt之后,在Qt安装目录(D:\Qt\Tools\mingw1120_64\bin)下,有gcc.exe是进行编译代码的
    01-C语言概述
  • wind+R-->cmd-->打开终端,使用gcc -v查看gcc是否可用,如果找不到就说明没有配置环境变量
    01-C语言概述
  • 如果想让计算机能够执行gcc,比如让计算机能够找到gcc--就是配置环境变量(配置环境变量之后要重启终端)
    01-C语言概述
    01-C语言概述
    01-C语言概述
    windows中的几个命令
  1. cls 清屏
  2. dir 查看当前文件夹下有哪些文件

编译代码

gcc 文件绝对路径 -o 目标文件

01-C语言概述
上述方法要写路径,比较麻烦,可以在源代码文件夹下打开cmd,cmd直接切换到该目录下,这样就不用添加路径了
01-C语言概述

gcc 源文件 -o 编译文件名
  • 直接使用编译后的文件进行执行代码
    01-C语言概述

4.c语言编译步骤

C代码编译成可执行程序经过4步:
1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
2)编译:检查语法,将预处理后文件编译生成汇编文件
3)汇编:将汇编文件生成目标文件(二进制文件)
4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

4.1分步编译

预处理:gcc -E hello.c -o hello.i
编  译:gcc -S hello.i -o hello.s
汇  编:gcc -c hello.s -o hello.o
链  接:gcc    hello.o -o hello
选项 含义
-E 只进行预处理
-S(大写) 只进行预处理和编译
-c(小写) 只进行预处理、编译和汇编
-o file 指定生成的输出文件名为 file
文件后缀 含义
.c C 语言文件
.i 预处理后的 C 语言文件
.s 编译后的汇编文件
.o 编译后的目标文件

1. 预处理
01-C语言概述
01-C语言概述

  • include可以包含任何文件,可以是.h文件,也可以包含.c文件;.h文件是头文件
#include <stdio.h>
#include <a.c>
  • 注释在编译完之后被删除,注释有两种方法,单行注释//,多行注释/**/
  • 预处理时会将宏替换,将宏用后面的表达式进行替换
  • c语言每条语句都有分号,如果缺失分号,是可以进行预处理的,预处理的时候是不会检查语法错误的
#include <stdio.h>
#define PI 3.14 // #define表示定义一个宏
int main()
{
	printf("Hello world %lf\n",PI);//打印到终端
	printf("Evan zhang");
	return 0;
}

01-C语言概述

  • 条件编译,可以用来注释,在编译的时候选择性的编译
#include <stdio.h>
#define PI 3.14 // #define表示定义一个宏
int main()
{
	#if 0   // 不成立,中间内容不进行编译,#if 1进行编译
	printf("Hello world %lf\n",PI);//打印到终端
	printf("Evan zhang");
	#endif
	return 0;
}

01-C语言概述
01-C语言概述

2. 编译
将预处理文件编译成汇编文件(.s文件),编译会检查语法错误

gcc -S hello.i -o hello.s

3. 汇编
将汇编文件转换为二进制文件(.o)

gcc -c hello.s -o hello.o

4. 链接
二进制文件是执行不了的,需要进行链接,链接需要设置运行的环境比如堆和栈的空间,还有一些库文件

gcc    hello.o -o hello

01-C语言概述
01-C语言概述

5.system库函数

作用:在程序中启动另外一个程序
参数:待启动程序的路径名(有些程序在环境变量中能找到,不用加路径)

#include <stdio.h>
#include <stdlib.h>
int main()
{
	//system启动程序,如果这个程序系统在环境变量中能找到,不用加路径
	//如果环境变量中找不到,需要加路径
	//windows路径以\\或/进行分割
	//c语言中\表示转义字符,代表特殊含义
	system("D:\\LXmusic_install\\lx-music-desktop\\lx-music-desktop.exe");
	printf("Hello world\n");//打印到终端
	printf("Evan zhang");
        system("pause");  // pause程序的作用是等待用户输入任意按键
	return 0;
}

6.CPU内部结构与寄存器(了解)

6.1 64位和32位系统区别

  • 寄存器是CPU内部最基本的存储单元
  • CPU对外是通过总线(地址、控制、数据)来和外部设备交互的,总线的宽度是8位,同时CPU的寄存器也是8位,那么这个CPU就叫8位CPU
  • 如果总线是32位,寄存器也是32位的,那么这个CPU就是32位CPU
  • 有一种CPU内部的寄存器是32位的,但总线是16位,准32为CPU
  • 所有的64位CPU兼容32位的指令,32位要兼容16位的指令,所以在64位的CPU上是可以识别32位的指令
  • 在64位的CPU构架上运行了64位的软件操作系统,那么这个系统是64位
  • 在64位的CPU构架上,运行了32位的软件操作系统,那么这个系统就是32位
  • 64位的软件不能运行在32位的CPU之上
  • GPU主要用于运算浮点型数字运算
    01-C语言概述
  • 64位的总线也不会访问到2^64次方的地址
  • 寄存器就是存cpu运算所需要的数据

6.2寄存器名称

8位 16位 32位 64位
A AX EAX RAX
B BX EBX RBX
C CX ECX RCX
D DX EDX RDX

6.3寄存器\缓存\内存之间的关系

按与CPU远近来分,离得最近的是寄存器,然后缓存(CPU缓存),最后内存。

CPU计算时,先预先把要用的数据从硬盘读到内存,然后再把即将要用的数据读到寄存器。于是 CPU<--->寄存器<--->内存,这就是它们之间的信息交换。

那为什么有缓存呢?因为如果经常操作内存中的同一址地的数据,就会影响速度。于是就在寄存器与内存之间设置一个缓存。

因为从缓存提取的速度远高于内存。当然缓存的价格肯定远远高于内存,不然的话,机器里就没有内存的存在。

由此可以看出,从远近来看:CPU〈---〉寄存器〈---> 缓存 <---> 内存。

原文链接:https://www.cnblogs.com/Icer-newer/p/17205105.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:01-C语言概述 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • C++实现教务管理系统

    C++实现教务管理系统攻略 1. 简介 教务管理系统是学校行政管理的重要组成部分,方便教务管理人员进行课程管理、考试管理、成绩管理、学籍管理等工作。C++作为一种高级编程语言,具有良好的可移植性、强大的数据处理能力和较高的运行效率,适合用于教务管理系统的开发。 本文将介绍如何使用C++编程语言实现教务管理系统的开发,包括如何进行需求分析、系统设计、数据结构选…

    C 2023年5月23日
    00
  • C++ STL中的常用遍历算法分享

    C++ STL中的常用遍历算法分享 在 C++ STL 中,有很多方便实用的遍历算法,可以帮助程序员更方便地进行数据的遍历和处理。本文将分享 C++ STL 常用遍历算法的完整攻略。 算法介绍 常用的遍历算法有以下几种: for_each find find_if count accumulate 以上算法都位于 algorithm 头文件中,因此我们需要先…

    C 2023年5月22日
    00
  • C语言中如何判断质数

    C语言中判断一个数是否为质数的方法有很多种,下面是一种常见的方法: 1.定义一个变量i,从2开始逐个检查比该数小的自然数; 2.检查这些自然数中有没有能够整除该数的,若有则该数不是质数,反之则该数是质数; 3.循环结束后,若没有发现能够整除该数的自然数,则该数是质数。 下面是示例代码: #include <stdio.h> int isPrime…

    C 2023年5月23日
    00
  • 少女前线新手最全面入门指南 阵容搭配及枪娘选择攻略

    少女前线新手最全面入门指南 前言 《少女前线》是一款枪械题材的卡牌养成游戏,深受广大玩家喜爱。然而,对于新手来说,玩法和系统繁琐复杂,很容易迷失方向。因此,本篇文章将为各位新手提供一份全方位的入门指南,帮助大家快速了解游戏,并通过合理的阵容搭配和枪娘选择攻略,提高游戏体验。 入门指南 1. 完成游戏引导流程 在刚进入游戏时,请务必按照游戏引导流程逐步完成任务…

    C 2023年5月22日
    00
  • C++头文件和cpp文件的原理分析

    下面我会为你详细讲解“C++头文件和cpp文件的原理分析”的完整攻略,包含以下内容: C++头文件和cpp文件的作用: 头文件和cpp文件相当于C++中的两个重要的分离式编译的机制。「头文件」通常包含程序所用到的函数的声明和类的定义,而「cpp文件」则包含函数的实现和类的方法定义。C++通过将程序分割为不同的文件来提高软件的可维护性和可扩展性,使得每个文件包…

    C 2023年5月23日
    00
  • Python调用C语言程序方法解析

    概述 Python是高级语言,能够完成大多数任务,但是有时我们需要更高效、更低层的代码来完成任务。在这种情况下,我们可以使用C语言来实现算法或其他进程密集型任务。调用C语言程序使我们可以利用C语言的所有强大功能,然后通过Python进程访问它。在本文中,我们将介绍如何使用Python调用C语言程序的过程。 编写C语言程序 首先,我们需要编写需要调用的C语言程…

    C 2023年5月23日
    00
  • C语言实现扫雷经典游戏

    C语言实现扫雷经典游戏攻略 概述 扫雷经典游戏是一种利用逻辑推理完成的益智游戏。本攻略将详细讲解如何使用C语言实现扫雷经典游戏。 准备工作 在开始编写代码前,需要安装C语言编译器。常用的C语言编译器有GCC、Clang等,可根据自己的喜好选择。此外,还需要使用到C语言中的标准库函数,如rand()、time()等,需要确保它们的头文件stdlib.h和tim…

    C 2023年5月23日
    00
  • C语言写一个散列表

    C语言写一个散列表的完整攻略 什么是散列表? 散列表是一种数据结构,它将键映射到值。通过使用散列函数,散列表可以快速查找数据。散列表可以用于实现字典、哈希表、集合等数据结构。 散列表的实现 散列表的实现可以分为以下几步: 定义散列表的结构体以及散列表元素的结构体; 实现散列函数; 实现插入元素方法; 实现查找元素方法; 实现删除元素方法; 实现销毁散列表方法…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部