首页 > 其他分享 >01. C语言概述

01. C语言概述

时间:2023-02-13 12:44:47浏览次数:93  
标签:文件 gcc 01 程序 C语言 编译 概述 template

一、C语言简介

1.1、什么是C语言

  C语言是一门 面向过程 的、抽象化 的通用程序设计语言,广泛应用于 底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

1.2、C语言的发展历程

  C语言诞生于美国的贝尔实验室,由 丹尼斯.里奇(Dennis MacAlistair Ritchie)以 肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的 B语言 为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了 UNIX,且随着 UNIX 的发展,C语言 也得到了不断的完善。为了利于 C语言 的全面推广,许多专家学者和硬件厂商联合组成了 C语言标准委员会,并在之后的 1989 年,诞生了第一个完备的 C标准,简称“C89”,也就是“ANSI C”,截至 2020年,最新的 C语言 标准为 2018 年 6月 发布的“C18”。

1.3、C语言的语言特点

  C语言 是一种 结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且 C语言 的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。

1.3.1、C语言的优点

【1】、简洁的语言

  C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

【2】、具有结构化的控制语句

  C语言是一种结构化的语言,提供的控制语句具有结构化特征,如 for语句、if...else语句 和 switch语句 等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。

【3】、丰富的数据类型

  C语言 包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。

【4】、丰富的运算符

  C语言包含 34 个运算符,它将赋值、括号等均视作运算符来操作,使 C程序 的表达式类型和运算符类型均非常丰富。

【5】、可对物理地址进行直接操作

  C语言 允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。C语言 不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系统软件编程领域有着广泛的应用。

【6】、代码具有较好的可移植性

  C语言 是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用 C语言 实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的 C程序 可以在另一台计算机上轻松地运行,从而极大的减少了程序移植的工作强度。

【7】、可生成高质量、目标代码执行效率高的程序

  与其他高级语言相比,C语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。

1.3.2、C语言的缺点

  C语言 的缺点主要表现为 数据的封装性弱,这一点使得C在数据的安全性上有很大缺陷,这也是 C 和 C++ 的一大区别。

  C语言 的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言 比其他高级语言较难掌握。也就是说,对用 C语言 的人,要求对程序设计更熟练一些。

  C语言 相对于 Java、Python 等编程语言而言,它的可移植性较差,它对平台的依赖较多。

1.4、C语言的应用领域

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

  • C语言 可以写网站后台程序
  • C语言 可以专门针对某个主题写出功能强大的程序库
  • C语言 可以写出大型游戏的引擎
  • C语言 可以写出另一个语言
  • C语言 可以写操作系统和驱动程序
  • 任何设备只要配置了微处理器,就都支持 C语言

二、开发环境搭建

2.1、环境搭建

  C语言的开发环境有多种,我们可以使用微软开发的 Visual Studio 来开发 C语言程序,也可以采用 gcc + 文本编辑器 的方式来开发 C语言程序。

  MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的 Windows 特定头文件和使用 GNU 工具集导入库的集合,允许你在 GNU/Linux 和 Windows 平台生成本地的 Windows 程序而不需要第三方 C 运行时(C Runtime)库。我们可以通过以下链接下载 MinGW:https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/?tdsourcetag=s_pctim_aiomsg

image

【1】、version

  Version:指的是 gcc 的版本,如果没有特殊的需求,一般选择最高的版本号即可。

【2】、Architecture

  Architecture:电脑系统是 64位 的,选择 x86_64;如果是 32位 系统,则选择 i686。

【3】、Threads

  Threads:如果是 Windows ,选择 win32 ,如果是 Linux、Unix、Mac OS 等其他操作系统要选择 posix。

【4】、Exception

  Exception:seh 是新发明的,而 sjlj 则是古老的。seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位。

建议64位操作系统选择 seh。

image

由于使用在线安装程序安装 MinGW 总是出错,建议直接下载对应版本的免安装的压缩包使用;

2.2、配置环境变量

  右键此电脑图标,选中属性选项,在弹出的菜单中选择高级系统设置。选择高级选项,点击环境变量,在弹出的选项卡,选中 Path 属性,点击编辑,在弹出的选项卡中点击新建按钮,将 MinGW 安装目录的的 bin 目录添加到 Path 属性值中。

image

image

在配置环境的变量的时候,会有两个环境变量,上面的是当前用户的用户变量,下面的是系统的变量。用户变量只针对当前用户起作用,系统变量对全部用户都起作用,对于个人电脑来说,用户变量和系统变量的差别不大;

2.3、一个简易的C语言程序

#include <stdio.h>

int main()
{
    printf("hello world!\n");
    return 0;
}

2.4、C语言的编译过程

  C语言编译成可执行程序经过 4 步:

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

image

  gcc 分步编译过程:

编译过程 gcc 命令 示例
预处理 gcc -E 源文件                           -o 预处理后的C语言文件.i gcc -E template.c -o template.i
编译 gcc -S 预处理后的C语言文件.i  -o 汇编文件.s gcc -S template.i -o template.s
汇编 gcc -c 汇编文件.s                     -o 二进制文件.o gcc -c template.s -o template.o
链接 gcc      二进制文件.o                -o 目标生成文件 gcc     template.o -o template.exe

  各个命令参数的含义:

选项 含义
-E 只进行预处理
-S 只进行预处理和编译
-c 只进行预处理、编译和汇编
-o file 指定生成的输出文件名为 file

  文件后缀含义:

文件后缀 含义
.c C语言 源文件
.i 预处理后的 C语言 文件
.s 编译后的汇编文件
.o 编译后的目标文件

我们可以通过 gcc -o 生成的目标程序 源代码文件 一步编译 C语言 程序,例如:gcc -o template.exe template.c

标签:文件,gcc,01,程序,C语言,编译,概述,template
From: https://www.cnblogs.com/kurome/p/17115943.html

相关文章

  • 呈现倒计时时间(剩余时间:09天01时10分12秒)
    vardate1=newDate();//实例化现在的时间vardate2=newDate('2020-12-3020:36-58');vardateDis=(date2-date1)/1000;//相差的总秒数......
  • C语言:任意输入一串数字,统计出现次数最多的数字及出现次数
    #include<stdio.h>main(){intshu[10]={0},su,max[2];while((su=getchar())!='\n')shu[su-48]++;for(su=1,max[1]=0;su<10;su++)if(shu[su]>=......
  • sqlserver2019 服务启动失败 报10013
    排查:D:\ProgramFiles\MicrosoftSQLServer\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG023-02-1310:57:05.22spid22sAself-generatedcertificatewassuccessfu......
  • C语言点名程序[2023-02-13]
    C语言点名程序[2023-02-13]一、实验目的本实验要求学生使用C语言,基于一个具体的开发工具,设计一个较大的程序,通过实验帮助学生巩固教学内容,培养学生的实践和实际动手能力......
  • redis概述与redis下载&安装
     redis概述与redis下载&安装redis概述 redis是一款高性能的NOSQL系列的非关系型数据库什么是NOSQLNoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”,是一项......
  • SAP MM事务代码S_P00_07000139可以用于跟踪物料移动细节
    SAPMM事务代码S_P00_07000139可以用于跟踪物料移动细节SAP系统里有很多标准的报表可以查询指定时间段的期初期末库存,出库入库的数量金额等信息。除了比较常见的事务代码以......
  • P8649 [蓝桥杯 2017 省 B] k 倍区间
    题目链接:https://www.luogu.com.cn/problem/P8649方法一:模拟暴力(20分)#include<bits/stdc++.h>usingnamespacestd;constintmax_n=100010;intn,k,a[max_n];lo......
  • 《Terraform 101 从入门到实践》 Terraform在公有云GCP上的应用
    《Terraform101从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。Terraform支持的公有云有很多......
  • 01 Django简介
    前戏Wsgiref模块封装了socket代码请求来的时候将http数据格式拆封成一个大字典响应走的时候将数据打包成符合http协议要求的数据格式#模块封装了socket代码并将请求......
  • C语言:最小公倍数 方法集合
    //求最小公倍数//两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。#include<stdio.h>main(){intm,n,i,......