一、第一个C语言程序 1、vim xxx.c 创建.c源文件 2、编写代码,并保存退出 3、gcc xxx.c 编译.c源文件,成功会得到a.out可执行文件 4、./a.out 运行可执行文件 注意:可以合并3、4 gcc xxx.c && ./a.out #include <stdio.h> 程序员所编写的代码不是标准C代码,需要一段程序把它翻译成标准C代码,负责翻译的程序叫做预处理器, 翻译的过程叫做预处理,需要被翻译的代码叫做预处理指令,以#开头的代码叫做预处理指令 #include 功能是导入头文件 #include <xxx.h> <> 从系统指定路径(/usr/include/)查找头文件并导入 #include "xxx.h" "" 先从当前的工作路径查找头文件,如果找不到再从系统指定路径查找并导入 stdio.h 头文件:以.h结尾,里面存放的是辅助性代码,绝大多数都是函数的说明 int main() { printf("Hello World!\n"); return 0; } main函数: C语言以函数为单位管理代码,一个函数就是一段具有某一项功能的代码段 main函数是程序的执行入口,必须有且只能有一个 int 是一种数据类型,它表示main函数的执行结果是一个整数 return 功能有两个: 1、结束函数的执行 2、返回一个结果给函数的调用者(return返回值的取值范围是0~255) main函数的调用者是操作系统,它的返回值是给了操作系统的,它的值能反应出程序是如何结束的,一般有三类: 正数 出现异常 (别人的错误) 0 一切正常 负数 出现错误 (自己的错误) 可以输入 echo $? 来查看mian返回的值 printf/scanf 是标准库中的函数,负责输出数据、输入数据 printf("想要输出的内容"); 转义字符: 键盘上一些无法直接打印显示的符号,用一些特殊的字符组合来表示,这种特殊的字符组合称为转义字符,\n 就是其中之一 \r 回到行首 \t 制表符(一个制表区占8列),相当于Tab,用于输出格式对齐 \b 退格键 \a 铃响 \\ 表示一个\ %% 表示一个% *可以用\12 来表示此时为8进制需转换成十进制再通过ascII码来找到对应n,r,t,回车之类的 \x12 此时是16进制 C语言中以分号作为一行代码的结束,使用大括号划分区域 二、编译器 负责把人能看得懂的记录着代码的文件,翻译成计算机能看得懂的二进制文件,由预处理器、编译器、链接器组成 gcc是由GNU社区为了编译Linux内核代码而开发的一款免费的编译器 gcc常用的编译参数: -E 只显示预处理的结果到终端 -std=gnu99 设置C99语法标准 -c 只编译不链接 -o 指定编译结果的名字 -oname或-o name -S 生成汇编代码 -I 指定头文件的加载路径 -I 加载路径 -Wall 尽可能多地产生警告 -Werror 把警告当错误处理 -l 指定要加载的代码库 -lm 使用数学库 警告可以生成可执行文件,错误不行 三、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语言的文件类型: .c 源文件 .h 头文件 .h.gch 头文件的编译结果文件(gcc xxx.h),它会被优先使用--->如果后面更改了.h文件内的内容仍然会优先执行.h.gch文件 .i 预处理文件 .s 汇编文件 .o 目标文件 .a 静态库文件 .so 共享库文件 五、存储空间的单位: Bit 比特 一个二进制位,只能存储0或者1,计算机中存储数据的最小单位 Byte 字节 八个二进制位,计算机存储器描述存储容量的基本单位 KB 1024字节 MB 1024KB GB 1024MB TB 1024GB PB 1024TB 六、数据类型 为什么要对数据进行分类? 1、现实生活中的数据本身就自带类别属性 2、对数据进行分类可以节约存储空间、提高运行速度 C语言中数据分类为两大类:自建(程序员自己设计的类型:结构、联合、类)和内建(C语言自带的类型) 注意:运算符 sizeof 可以计算类型、变量的字节数 ---> sizeof((int)a+1.0)---->8 但是只计算结果的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位整数 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位整数 注意:signed不加就代表了加 由于定义无符号整型时比较麻烦,C标准库把这些类型重定义成一些新的简单的类型名: 需要导入头文件<stdint.h> uint8_t uint16_t uint32_t uint64_t int8_t int16_t int32_t int64_t 浮点型: 有小数部分的类型 float 单精度 4 有效数字7 double 双精度 8 有效数字15 long double 12/16 注意:小数点后默认输出六位,但不一定有效 注意:采用一定的算法对真实的浮点型数据到二进制数据进行转换,这个过程比存储、读取整型要慢得多,编程时尽量使用整型数据 double num(如何判断一个double类型变量的值是否等于0?) 因为浮点型数据存储是不精确(十进制小数如何转化为二进制?)的,所以不能直接判断: num == 0 if(num < 0.000001 && num > -0.000001) if(abs(num)<0.000001) 模拟型: 字符型:char 单引号括起来的单个字符(注意转移字符的含义) 字符就是符号或图案,在内存中存储的依然是整数,需要显示出字符时,会根据ASCII表中对应的关系显示出对应的字符或图案 '\0' 0 特殊字符 '0' 48 'A' 65 'a' 97 转移字符可以用数字表示,比如:'\12' 布尔型:bool 先有的C语言后有的bool类型,所以C语言中不可能有真正的布尔类型,在头文件stdbool.h 中对布尔类型进行了模拟 bool true false bool类型变量占1个字节,但是true和false占4个字节 七、变量与常量 什么是变量:程序运行期间数值可以发生变化的叫做变量,相当于一个存储数据的盒子 定义: 类型名 变量名; int num; 取名规则: 1、由字母、数字、下划线组成 2、不能以数字开头,不能与C语言32个关键字重名(能默写) 3、区分大小写 printf scanf bool true sizeof 4、见名知意 (功能、类型、作用范围...) 注: 有些特殊情况 eg:int printf;--->这个声明是正确的,但是我们后续使用printf("xxxx");时这个输出函数就会失效 eg:int true;---->当没有#include<stdbool>时这样使用是没问题的;但是一旦引用之后这个声明就成了错误的。 使用: 赋值: 变量名 = 10; num = 10; 参与运算: 2+(变量名*10); 2+(num*10); 注意:C语言中变量的初始值是随机的,为了安全起见,一般在定义时初始化为0 变量的输出与输入: int printf(const char *format, ...); 功能:输出数据 format:"双引号包含的提示信息+占位符" ...:变量名列表 返回值:输出字符个数 类型占位符:C语言中通过类型占位符传递变量的类型 signed char short int long long long %hhd %hd %d %ld %lld unsigned char short int long long long %hhu %hu %u %lu %llu float %f double %lf long double %LF 字符型 char %c int scanf(const char *format, ...); 功能:输入数据 format:"双引号包含的占位符" ...: 变量地址列表 返回值:成功输入的变量的个数 注意:scanf需要提供变量的地址 &变量名 == 变量地址 什么是常量:程序运行期间数值不能改变的叫做常量 100 默认int类型 100l long 100ll long long 100u unsigned int 100lu unsigned long 100llu unsigned long long 3.14 默认double 3.14f float 3.14l long double 八、格式化输入输出 %nd 显示n个字符宽度,不够则补充空格,右对齐 %-nd 显示n个字符宽度,不够则补充空格,左对齐 %0nd 显示n个字符宽度,不够则补充0,右对齐 %n.mf 显示n个字符宽度(小数点也算一位),不够则补充空格,m表示小数点后几位(四舍五入,不够补0),右对齐 %g 不显示小数点后多余的0 %e 以指数形式输出浮点数
标签:gcc,int,unsigned,long,C语言,初见,预处理 From: https://www.cnblogs.com/amour02-study/p/18356481