c语言
一、简介:
BCPL->newB->c->UNIX->Minix->linux->gcc
c语言诞生于1970-1973年,在肯.汤姆逊和丹尼斯.里奇的主导下编写完成,归属于美国的贝尔实验室
c语言是为了专门编写操作系统而诞生的语言,所以天生适合硬件编程,以运行速度快而著称,也非常适合实现数据结构与算法
由于c语言出现时间过早,c语言存在非常多的缺陷,也没想到普通人也能编程,因此存在缺陷,但前辈们总结了经验 (c语言的陷阱与缺陷)
c语言语法标准:
c89语言标准 gcc默认语法标准
c99语法标准 完全支持c89对c99标准的拓展和增强 gcc-std=gnu99
c11语法标准,全新升级
一、第一个c程序
#include <stdio.h>
程序员所编写的代码并不是标准的c代码,需要一段程序把它翻译成标准的c代码,
负责翻译的程序叫做预处理器,翻译的过程叫做预处理,被翻译的代码叫做预处理
指令以#开头的代码都是预处理指令
#include 的功能是把一个头文件导入当前文件
#include <> 从系统指定的路径下加载头文件
#include "" 先从当前路径下加载头文件,如果找不到,再从系统指定的路径下加载头文件
c语言标准委员会为c语言以函数的形式提供了一些基础功能,这些函数就被封装到了libc.so库文件中
用头文件负责对库中的函数进行说明
stdio.h 负责对输入输出功能的函数进行说明
int main()
{
printf("Hello World!\n");
return 0;
}
main函数
c语言以函数为单位来管理代码,是管理代码的最小单位,一个函数就是一段具有某项功能的代码段
main函数是程序的执行入口,有且只有一个
int 是一种数据类型,它表示main函数的执行结果是一个整数
return 功能有两个:1、结束函数的执行 2、返回一个数据给函数的调用者
main函数是有操作系统调用,它的返回值给操作系统的,反映了程序是怎么样结束的,通常有3种情况:
正数 出现异常(别人的错误) 0 一切正常 负数 出现错误(自己的错误)
printf/scanf 是标准库中的函数 负责输入输出数据一般用来调试代码
转义字符:
键盘还是那个一些按键是没有符号的,用一些特殊的字符组合来表示,这些特殊字符组合就是转义字符
\n就是其中一个 \n 换行 \b退一个字符 \r回到行首 \t 制表符,用于对齐数据
\a 铃响 \\表示一个\ %%表示一个%
C语言以分号作为一行代码的结束,使用大括号划分代码区域
二、编译器
负责把人能看得懂的记录了代码的文本文件,翻译成计算机能看懂的二进制文件,有预处理器、编译器、链接器
gcc是有GNU组织为了编译linux内核diam面而开发的一款免费、开源的编译器,默认采用c89标准,-std=gnu99
可以设置语法标准
常用的参数:
-E 显示预处理的结果 -c只编译不链接 -o设置编译结果的名字 -I指定头文件的加载路径 -S生成汇编代码
-l 指定要使用的库文件 -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的可执行文件(a,b,c 文件名字)
c语言的文件类型:
.h 头文件 .h.gch 头文件的编译结果,优先使用
.c 源文件
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 共享库文件
四、数据类型
分类原因:
1.现实社会中的数据就是自带类别属性
2.对数据进行分类可以节约存储空间,提高运行效率
存储空间单位:
bit 比特 1个二进制位 只能存0/1,计算机存储数据的最小单位
byte 字节 8个二进制位 计算机存储存储的基本单位
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
unsigned char 1 0~255
unsigned short 2 0~65535
unsigned int 4 0~40亿
unsigned long 4/8
unsigned long long1 8 0~以1开头的20位整数
注意:由于定义无符号数据时比较麻烦,标准库把无符号的类型重新定义成了一下类型:
uint8_t uint16_t uint32_t uint64_t
int8_t int16_t int32_t int64_t
浮点型:
float 4
double 8
long double 12/16
注意:采用科学计算方法,二进制与真实数据之间需要进行换算,因此浮点型
数据耗时比整型数据多得多,编程是应尽量选择整型
小数点后六位有效
time ./a.out 计算程序运行时间
模拟型:
字符型 char
字符其实就是符号或图案,内存中存储的是整数
当需要显示成字符时会根据ASCII码表中对应的关系显示出相应的符号或图案
布尔型bool
先有了c语言之后才有了bool类型,所以C语言中没有真正的布尔类型,只有加stdbool.h
头文件对布尔类型进行模拟
bool true flase
五、变量与常量
1.什么是变量:程序在运行期间数据可以变化的叫做变量,相当于存储数据的盒子
定义:
类型 变量名;
取名规则:
1、由字母、数字、下划线做成
2、不能以数字开头
3、不能以32个关键字重名
4、见名知意
使用:
赋值 num=100;
参与运算 num*10;
2.变量的输入输出:
int printf(constant char *format,...);
功能:输出数据
format:“双引号包含的格式信息(提示信息+占位符)
...:变量列表
返回值:输出字符的个数
类型占位符:C语言通过类型占位符的方式来传递变量的类型
有符号 %hhd %hd %d %ld %lld
无符号 %hhu %hu %u %lu %llu
%f %lf %lf %c
练习1:定义各种类型的变量初始化,使用printf来显示
int num_i=0;
printf("num=%d %d\n",num_i,num_i);
int scanf(const char *format,...);
功能:输入数据
format:“双引号包含的格式信息(占位符)“
...:变量地址列表
返回值:成功输入的变量个数
注意:
创建步骤: vim ~/.vimrc
mk 文件创建
vim .c 创建c文件
gcc .c 运行c文件 echo $? 查看上一个程序的返回值
./tab 输出结果
标签:文件,gcc,头文件,入门,代码,预处理,语言 来源: https://blog.csdn.net/qq_45057298/article/details/118632904
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。