2021-07-10 标准C语言基础知识(一)

本文介绍了C语言的历史、基本数据类型、变量与常量的概念,详细讲解了第一个C程序的构成,包括main函数、printf和scanf函数的使用。此外,还阐述了C程序的编译过程以及预处理器、编译器和链接器的作用。文章还提到了C语言中的数据分类,如整型、浮点型和字符型,并强调了变量初始化的重要性。

C语言简介

BCPL->newB->C->UNIX->Minix->linux->gcc
C语言诞生于1970-1973年,在肯.汤普逊和丹尼斯.里奇(c语言之父)的主导下编写下完成,归属于美国
的贝尔实验室。
C语言专门为了编写操作系统而诞生的语言,所以天生适合硬件编程,以运行速度快而著称,也非常适
合实现数据结构与算法。
由于C语言出现的时间过早,C语言是存在非常多的缺陷,也没想到普通人也能使用C语言编程,因此就
存在缺陷,但是前辈们总结了一些避免的经验《C语言的陷阱与缺陷》C语言三剑客
C语言的语法很自由,也意味着危险,自由源于自律

C89语法标准,gcc默认的语法标准
C99语法标准,对C89标准的扩展和增强  gcc    -std=gnu99  
c11语法标准,全新的升级

一、第一个C程序

#include<stdio.h>
int main()
{
  printf(“Hello World!\n”);
  return 0;
}

#include<stdio.h>

程序员所编写的代码并不是标准的的C代码,需要一段程序把他翻译成标准的C代码,负责翻
译的程序叫做预处理器,翻译的过程叫预处理,被翻译的代码叫预处理指令,以#开头的代码都是预处理指令
#include 的功能是把一个头文件导入到当前文件中
#include <> 从系统指定的路径下加载头文件
#include “” 先从当前路径下加载头文件,如果找不到,再从系统指定的路径下加载头文件
操作系统是通过设置环境变量来指定加载头文件的路径
stdio.h
头文件:以.h结尾,里面存储的是一些辅助性的代码,绝大部分是函数的声明
源文件:以.c结尾,里面存储的是功能性的代码
C语言标准委员会为C语言以函数的形式提供了一些基础功能,这些函数就被封装到了libc.so库文件中
用很多头文件负责对库中的函数进行分类说明,stdio.h就是其中的一个,常用的还有stdlib.h string.h
stdio.h 负责对输入输出功能的函数进行说明

main函数:

    C语言以函数为单位来管理代码,是管理代码的最小单位,一个函数就是具有某项功能的代码段
    main函数是程序的执行入口,有且只有一个
    int是一种数据类型,他表示main函数的执行结果是一个整数
    return 功能有两个:1、结束函数的执行 2.返回一个数据给函数的调用者
    main函数是由操作系统调用,他的返回值给操作系统的,反应了程序是怎么结束的,通常有三种情况:
    整数            出现异常 (别人的错误) 
    0               一切正常
    负数            出现错误 (自己的错误)
    可以通过 echo $? 命令查看上一个程序的返回值

printf/scanf

是标准库中的函数,负责输入、输出数据,一般用来调试代码
printf("---------\n");
转义字符:
 键盘上一些按键是没有符号的,用一些特殊的字符组合来表  示,只写特殊字符组合就是转义字符,\n就是其中一个
\n 换行
\b 退一个字符 \b \b 退格
\r 回到行首
\t 制表符,用于对齐数据
\a 铃响
\\ 表示一个\
%% 表示一个%
C语言以分号作为一行代码的结束,使用大括号划分代码区域

二、编译器

负责把人能看的懂的记录了代码的文本文件,翻译成计算机能看懂得二进制文件,由预处理器、编译器、链接器
gcc是由GNU组织为了编译Linux内核代码而开发放入以款免费的编译器,默认采用c89标准,-std=可gnu99以设置语法标准
    常用的参数:
        -E          显示预处理的结果
        -S          生成汇编代码            .s
        -c          只编译不链接            .o
        -o          设置编译结果的名字
        -I          指定头文件的加载路径
        -l          指定要使用的库文件      -lm
        -Wall       以更严格的标准来检查代码,尽可能多地显示警告
        -Werror     把警告当错误处理

三、C代码变成可执行文件的过程

1、预处理 把源文件翻译成预处理文件
    gcc -E code.c               显示预处理结果
    gcc -E code.c -o code.i     生成以.i结尾的预处理文件
2.编译 把预处理文件翻译成汇编文件
    gcc -S code.i               生成以.s结尾的汇编文件
3、把汇编文件编译成二进制放入目标文件
    gcc -c code.s               生成以.o结尾的目标文件
4、链接 把若干个目标文件合并成一个可执行文件
    gcc a.o b.o c.o...          默认生成一个a.out的可执行文件        

C语言的文件类型:
.h      头文件
.h.gch  头文件的编译结果,他会被优先使用
.c      源文件
.i      预处理文件
.s      汇编文件
.o      目标文件
.a      静态文件
.so     共享库文件

四、数据类型

为什么要对数据进行分类:
    1、现实的社会中的数据就是自带的类别属性
    2、对数据进行分类可以节约存储空间、提高运行效率

存储空间的单位:
Bit     比特 一个二进制位,只能存储0或者1,计算机存储数据的最小单位
Byte    字节 八个二进制位,计算机存储数据的基本单位
Kb      1024字节
Mb      1024Kb
Gb      1024Mb
Tb      1024Gb
Pb      1024Tb

C语言中数据分为两大类:自建(程序员自己设计的:结构、联合、类)和内建(C语言自带的)

注意:可以使用sizeof运算符计算类型的字节数

整型:
    有符号 signed
        signed char         1       -128~127
        signed short        2       -32768~32767
        signed int          4       正负20亿
        signed long         4/8     
        signed long long    8       正负9开头19位整数
    注意:signed 不加就代表加

    无符号 unsigned
        unsigned char         1     0~255
        unsigned short        2     0~65535
        unsigned int          4     0~40亿
        unsigned long         4/8   
        unsigned long long    8      0~以1开头的20位整数
    注意:由于定义无符号数据时比较麻烦,标准库把这些无符号的数据类型重新定义成了以下类型:
        使用时需要包含头文件:stdint.h
        uint8_t uint16_t uint32_t uint64_t
        int8_t  int16_t  int32_t  int32_t
浮点型:
    float               4
    double              8
    long double         12/16
    注意:浮点型数据都是采用科学计算法,二进制与真实数据之间需要精心换算,因此浮点型数据耗时要比整型数据多得多,编程是精良选择整型
    小数点后六位有效

    time ./a.out        计算程序运行时间
模拟型:
    字符型char
        字符其实就是符号或图案,内存中存储的是整数,
        当需要显示成字符时,会根据ASCII码表中对应的关系显示出相应的符号或图案
        '\0'    0
        '0'     48
        'A'     65
        'a'     97

    布尔型bool
        先有的C语言之后才有了bool类型,所以c语言中是不可能有真正的布尔类型,stdbool.h 头文件对布尔类型进行了模拟
        bool true false

五、变量与常量

什么是变量:程序在运行期间数据可以变化的叫做变量,相当于存储数据的盒子
定义:
    类型 变量名;
    取名规则:
    1、由字母、数字、下划线组成
    2、不能以数字开头
    3、不能与32个关键字重名
    4、见名知意(功能、类型、范围...)
使用:
    赋值:  num = 100;
    参与运算:num * 10;
注意:变量的默认值是随机的,为了安全起见要进行初始化,一般初始化为0;

变量的输入、输出:
    int printf(const char *format,...);
    功能:输出数据
    format:"双引号包含的格式信息(提示信息+占位符)"
    ...:变量列表
    返回值:输出字符的个数

    类型占位符:C语言中通过类型占位符的方式来传递变量的类型
    %hhd %hd %d %ld %lld                有符号
    %uud %ud %u %lu %llu                无符号
    %f %lf %LF 
    %c

int scanf(const char *format,...);
功能:输入数据
format:"双引号包含的格式信息(占位符)"
...:    变量地址列表 
返回值:成功输入的变量个数
注意:scanf需要的变量的类型、变量地址
变量地址=&变量名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值