C言语语法总结(随时更新)
一、gcc 1. gcc xxx.c -o xxx #把原代码编译成可执行文件xxx 2. gcc -c xxx.c #编译: 把原代码编译xxx.o后辍的目标文件 3. gcc xxx.o -o xxx #链接: 把xxx.o后辍的目标文件链接成可执行文件xxx ###2.3 步等于1,但是会多出个xxx.o的目标文件,可用于检查错误 4. 编译过程 1. 预处理: gcc -E demo.c -o demo.i #生成预处理文件 (处理#开头的命令, 如宏展开, include代码复制, 删除注释等) 2. 编译: gcc -S demo.i -o demo.s #把预处理文件生成汇编文件(词法分析, 语法分析, 语义分析) 也可以直接把源文件生成汇编文件 gcc -S demo.c -o demo.s 3. 汇编: gcc -c demo.s -o demo.o #把汇编文件生成.o后辍的目标文件, 也可以直接使用源码文件生成目标文件 4. 链接: gcc demo.o -o demo #把目标文件链接成可执行文件 也可以直接把源文件直接生成可执行文件 gcc demo.c -o demo 经历的过程有预处理、编译、汇编、链接 #等同于ide的buile和run Visual Studio 1. F5或ctrl+F5或本地Windows调试器 #把原代码编译成可执行文件xxx 2. 生成->编译 #生成xxx.obj目标文件 3. 生成->仅用于项目->仅链接 cDemo #生成可执行文件xxx.exe ###2.3 步等于1 二、语法 1. puts("hello world"); #输出字符串 2. printf("a=%d, b=%d, c=%d", a, b, c); #10进制输出 # %hd 十进制输出 short 类型 # %d 十进制输出 int 类型 # %ld 十进制输出 long 类型 # %#ho 八进制输出 short 类型 # %#o 八进制输出 int 类型 # %#lo 八进制输出 long 类型 # %#hx/%#hX 十六进制输出 short 类型 # %#x/%#X 十六进制输出 int 类型 # %#lx/%#lX 十六进制输出 long 类型 十六进制的表示用到了字母, 因此x/X字母的表现形式不同,0b/0B 二进制 0 八进制 0x/0X 十六进制 # %c 输出一个字符 # %f 输出一个小数float #float与double类型的区别是, float点四字节(32位), double占8字节(64位) # %lf 输出一个小数double # %e 以指数输出一个float类型3.020000e-1 # %E 以指数输出一个float类型3.020000E-1 # %le 以指数输出一个double类型1.126400e+05 # %lE 以指数输出一个double类型1.126400E+05 # %g 智能输出小数float, 若是指数形式e小写 # %lg 智能输出小数double, 若是指数形式e小写 # %G 智能输出小数float, 若是指数形式E大写 # %lG 智能输出小数double, 若是指数形式E大写 # %s 输出一个字符串 3. int: 8Bit=1Byte(字节),一般占4字节,32Bit,也叫32位,如果不考虑正负数int类型保存的最大数为2的32次方减1, 约43亿 short int(short) 只占2字节(16位),如果不考虑正负数short保存的类型最大数2的16次方减1, 等于65535 long int(long) 占8字节(64位),如果不考虑正负数long保存的类型最大数2的64次方减1,这个值很大,过亿万亿了,我也不知道是多大 char 占一字节(8位) 如果不考虑正负数char保存的最大值为2的8次方减1, 等于255, 考虑正负数-128到127 4. 数据类型的长度(不同数据类型占的字节数称为数据类型长度) sizeof 方法可以检测出长度 short 2字节, int 4字节, long 4/8字节(系统不一样) 内存中存储的数字是以补码形式存储的 三、多线程 1. 创建线程: pthread_create 2. 阻止调用线程并接收返回值: pthread_join 3. 终止当前线程: pthread_exit 4. 线程间的终止信号: pthread_cancel (注意取消点的问题) 5. 锁 四、进制之间的转换 1. 整数任意进制转换为十进制: 按权相加 如: 八进制转成十进制 53627 = 5*84+ 3*83 + 6*82 + 2*81 + 7*80 = 22423 十六进制转成十进制 9FA8C = 9*164 + 15*163 + 10*162 + 8*161 + 12*160 = 653964 二进制转成十进制 11010 = 1*24 + 1*23 + 0*22 + 1*21 + 0*20 = 26 2. 小数任意进制转换为十进制: 如: 八进制转成十进制423.5176 = 4*82 + 2*81 + 3*80 + 5*8-1 + 1*8-2 + 7*8-3 + 6*8-4 = 275.65576171875 3. 整数十进制转换成任意进制: 除N取余, 逆序排列 如: 十进制转成八进制 36926 = 36926/8 = 4615 % 6 (商为4615余6) 4615/8 = 576 % 7 576/8 = 72 % 0 72/8 = 9 % 0 9/8 = 1 % 1 1/8 = 0 % 1 = 110076 十进制转二进制 42 = 42/2 = 21 % 0 21/2 = 10 % 1 10/2 = 5 % 0 5/2 = 2 % 1 2/2 = 1 % 0 1/2 = 0 % 1 = 101010 4. 小数十进制转任意进制: 乘N取整, 顺序排列 如: 十进制转八进制 0.930908203125 = 0.930908203125*8 = 7.447265625 int 7(整数部分) = 0.447265625*8 = 3.578125 int 3 = 0.578125*8 = 4.625 int 4 = 0.625*8 = 5.0 int 5 = 0.7345(八进制) 十进制转二进制 0.6875 = 0.6875 * 2 = 1.375 int 1 = 0.375 * 2 = 0.75 int 0 = 0.75 * 2 = 1.5 int 1 = 0.5 * 2 = 1.0 int 1 = 0.1011(二进制) 0.1 = 0.1 * 2 = 0.2 int 0 = 0.2 * 2 = 0.4 int 0 = 0.4 * 2 = 0.8 int 0 = 0.8 * 2 = 1.6 int 1 = 0.6 * 2 = 1.2 int 1 = 0.2 * 2 = 0.4 int 0 = 0.4 * 2 = 0.8 int 0 = 0.8 * 2 = 1.6 int 1 = 0.00011001………………(无限循环的二进制)
----------------------------C++---------------------------------------- 五、C++ 的命名空间 1. using namescape Name; 声明整个命名空间 2. using namescapename::var; 引入命名空间中的变量 3. 使用namescapename::var 方式使用命名空间中的变量 六、函数 1. 推荐使用内联函数来替换带参数的宏,内联函数不应声明,只要定义就行 2. 在同一作用域的函数的声明和定义,形参的默认值只能赋值一次,在不同作用域中可以赋值多次 3. 函数的重载: 参数列表双叫参数签名(类型、个数、顺序只要有一个不同就表示签名不同) 重载决议:精确匹配->类型提升->类型转换 如果在转换过程中不知道选用哪个函数,那么重载过程中会产生二义性错误 七、类与对象: 1. 类中的成员方法是内联函数,如果函数比较大,建议把类方法声明在类内部、定义到类外面,且在同一文件中 八、内存: 1. 全局数据区:在所有函数之外定义的变量、对象存放到全局数据区 2. 栈区:函数之内定义的变量和对象数据存放在栈区 3. 堆区:new创建的对象位于堆区
If the copyright belongs to the longfei, please indicate the source!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?