linux c 语言小结
gdb 使用
(gdb是调试linux c语言代码的,所以要调试linux c语言,先要 gcc -g 文件名,才能开始调试)
gdb 命令
首先在命令行中输入 gdb
调试的基本代码
list 展示
s 进入函数内部
按回车执行刚才的命令
start 开始调试
list 查看10行
P 变量 : 查看这个变量
p *p 找出p指向的值
bt 查看函数堆栈
f 1 跳到1这个堆栈
quit 退出
vim扩展使用
命令模式 w代表保存
shift + a 行尾
shift + i 行首
shift + o 上一行插入
o 下一行插入
:sp max.c 创建一个max.c的文件,同时打开多个文件
CTRL + W + ↓ 跳转到下面
:set nu 打开行号
按9后按dd 剪切9行
P 粘贴
:wqa 把所有文件保存退出
make使用
(要有Makefile文件,make执行只能是这个名字,所以先创建Makefile 文件)
vim Makefile
里面的'#'表示注释
Makefile里面内容
得到什么:需要1 需要2 需要3
编译什么 #如果需要的没有就从下面开始找,并且注意前面是一个table不能6个空格
得到什么:需要1
编译他
例子
hello.out:max.o min.o hello.c
gcc max.o min.o hello.c -o hello.out
max.o:max.c
gcc -c max.c
min.o:min.c
gcc -c min.c
注意make的编译指令是一个TAB,接近于6个空格,但是你不能打6个空格,否则会报错
执行 make,直接输入make就好
make
linux c 语言新知识
&& 连接符可以同时执行多条指令,如
gcc main.c -o main.o && ./main.o
查看main返回 (也就是正常main 后面return 0)
echo $?
c语言里main()函数有2个参数,int argv 和char* argc[],在你需要的时候可以调用他
main(int argv,char* argc[])
argv表示同时执行了几个命令, argc[]里面的内容表示执行命令的内容是很忙
stdin 标准输入流
stdout 标准输出流
stderr 标准错误流
" >>"(输出重定向,不覆盖)如:
(空或者1)1>>a.txt (把输出内容输出到a.txt中) (1为标准输出流,2代表标准错误流)
如: ls >> a.txt
“>”(覆盖的重定向)
“<”(输入重定向)
把input.txt输入到./a.out中
./a.out <input.txt
管道 “|”
把前一个的输出流放到后一个的输入流中
如你写了一个输出流的函数和需要一个输入流的c文件
如下a.c
#include<stdio.h>
int main(){
printf("1 2");
}
又写了 b.c(需要输入流的c文件)
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
}
gcc a.c -o a.out
gcc b.c -o b.out
./a.out | ./b.out
然后你就会发现输出了3也就是a+b
多个文件编译
自己定义个max.c文件
max.c内容
int max(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
hello.c 里面调用max.c的内容
gcc max.c hello.c -o hello.out
要加头文件:例如 #include "max.h"
max.h里面写 int max(int a,int b);
内存
int *p =&a;
p=p+3 地址指向往下移3位
gcc 编译
p[3] 和 p+=3一样