gcc和gdb用法
gcc用法:
gcc支持一下文件后缀:
.c C语言源文件
.h 程序包含的头文件
.i 已经与处理过的C源代码文件
.s 汇编文件
.o 编译后的目标文件
用法:
gcc -o hello hello.c
-o 输出可执行文件
-c 只要求编译器输出目标代码(.o文件),而不必输出可执行文件
-g 用于调试
./hello 运行可执行文件
程序调试:
3种方法:
1、设置输出:printf
2、利用gdb
3、二分法
利用FILE, LINE, FUNCTION实现代码跟踪调制
#include <stdio.h>
int main(int argc,char **argv)
{
printf(“%s,%s,%d\n”,_FILE__, __LINE__, __FUNCTION__);
return 0;
}
程序会输出当前运行的c文件,代码第几行,及运行函数名
C程序中包含数据结构与算法
数据类型
字符型数据:(sizeof可输出数据类型长度)
以下问题还不理解:
char类型的符号
/usr/include文件下存放C语言的头文件
其中limits.h头文件中是每种类型所能表示的最大值与最小值
C语言中格式化打印中%x与%#x区别:
%#x打印前边会加0x。
%p打印地址。
字符常量:
字母大小写转换可以加减‘ ’来实现。
字符串常量
例:“hello”
表示常量:
用一个表示符表示常量,一般用大写字母,用#define定义:
#define PI 3.1415926(没有分号)
宏定义是直接替换。
变量的存储类型:
变量声明:存储类型 数据类型 变量名
存储类型:
auto,register,static,extern
auto修饰的变量,只能在对应的函数或文件内部使用(不加修饰的变量默认是auto修饰的)
register称为寄存器型,讲变量放到CPU寄存器中,可以加快运行速度,如果寄存器中没有空间,就放到内存中。用register修饰的变量不能取地址。
static 静态变量,变量默认初始化为0.可以使局部变量,也可以是全局变量。静态局部变量在内存中地址固定,程序不结束就不会消失;修饰的全局变量只能在本文件内使用,外部文件不可访问。
extern 全局变量,引用其他文件的变量用extern修饰
运算符
C语言提供的算术运算符:+,-,*,/,%,++,–
C语言提供的关系运算符:>,>=,<,<=,==,!=
逻辑运算符:!,&&,||。
位运算符:~,&,|,^,>>,<<
复制运算符:+=,-=,*=,/=,%=,&=,|=,^=,>>=,<<=
特殊运算符:
1. 三目运算符 ? :等价于if
2. 逗号运算符:
可以有多个运算量,按从左到右依次执行,
float x=10.5, y=1.8, z=0;
//z是最后一个表达式的值
z = (x+=5, y=x+0.2); //z=y
z = (x=y=5, x+=1);
z = (x=5, y=6, x+y);
z = (z=8, x=5, y=3);
3.sizeof运算符
sizeof(类型或变量名)返回大小
C语言中的优先级