Linux下的C语言

  • 1. 搭建C语言开发环境/运行环境
    • 1. 文本编辑
    • 2. 编译器
    • 3. 头文件和系统预装文件
    • 4. make 工具
    • 5. echo
  • 2. 标准输入流/输出流/错误流
    • 1. 重定向机制
    • 2. 管道
  • 3.GDB调试工具的使用以及内存
    • 1. GDB 调试工具的使用
    • 2. 内存
  • 4. 指针

1. 搭建C语言开发环境/运行环境

1. 文本编辑

Linux下文本编辑器常用emacs和vim,由于本人常用vim,因此暂时只讲述vim的用法,vim需要自行安装

#安装命令
sudo apt-get update  #将系统内所有资源更新为最新版本
sudo apt-get install vim 

vim的使用是一门深奥的学问,将vim使用好是现阶段的目标,让我们一起来看一下吧!

#vim编辑器的使用
vim **.c   #进入某个文件
#进入后为命令模式,需要按英文输入模式下的i进入插入模式,才能够编辑文档
#如果想要退出编辑模式,按esc键回到命令模式,shift+:进入输入命令模式,w表示保存,q表示退出,通常情况下wq一起使用
#一些小快捷键
I  当前光标前
a  当前光标后面插入
shift + a / A 行位插入
shift +i / I 行首插入
o 下一行插入
shift + o / O 上一行插入
x 删除光标所在位置的
dd 整行删除
number + dd 剪切当前光标下面的number行,放到粘贴板上
p 粘贴
set nu  显示行号

当我们想要编辑多个文件的时候怎么办呢?— 多个源文件分而治之

命令模式下:
sp 文件名.c
ctrl + w + 上箭头  进入上面的代码块
ctrl + w + 下箭头 进入下面的代码块
wqa  所有文件都保存并退出

2. 编译器

Linux下C语言编译器常使用cc或者gcc,一般的Linux系统已经为我们安装好了,可以通过命令进行查看。

#查看cc和gcc版本信息cc -vgcc -v#编译命令cc / gcc **.c参数:-c **.c  -o ***.out  编译后的文件名#执行命令./***.out

3. 头文件和系统预装文件

<> 这样文件导入,表示为系统预装文件
“” 这样导入的文件表示是在当前路径下的文件

头文件的作用:不会在修改的函数 公共框架/公共类 打包做成一个静态库,提前编译好,因为编译后就无法看到源代码了,可以写成头文件,便于其他人使用

例如:max的头文件max.h
int max(int a , int b);

4. make 工具

make工具可以将大型的开发项目分成若干个模块,可以清晰和快捷的整理源文件,内部使用gcc

#检查make版本信息
make -v

makefile 文件 每次只需要修改该文件即可
结构:

**注释
最终需要的文件:需要那些文件执行什么命令
需要文件1:源文件[tab/6空格]执行什么文件**
保存并退出
**make命令执行该文件**
eg:
# this is makefile
hello.out:max.o min.o hello.cgcc max.o min.o hello.c
max.o:max.cgcc -c max.c
min.o:min.cgcc -c min.c

5. echo

gcc main.c -o main.out && ./main.out
&& 符号表示前面表达式返回0后面语句才能够执行

echo $? 输出0表示程序运行成功,其他表示失败

2. 标准输入流/输出流/错误流

printf,scanf底层源码:

 fprintf(stdout,"please input the value a:\n");int a;/*scanf("%d",&a);*/fscanf(stdin,"%d",&a);if(a<0){fprintf(stderr,"the value must > 0\n");return 1;}

1. 重定向机制

“>>” 输出流重定向到某个文件,追加 不是覆盖
“>” 覆盖
“<” 输入重定向

2. 管道

“ | ” 将前部分输出传入到后半部分代码中

3.GDB调试工具的使用以及内存

1. GDB 调试工具的使用

注:gcc -g 编译的才能够进行调试

gdb 文件名.out
start  开始调试
l 列出源代码
n  继续执行
p 变量名  显示变量值
bt  查看函数堆栈
s 进入函数执行的内部

2. 内存

32位的系统最大只支持4g的内存,2^32 只有32条地址总线
64位的系统最大支持2^64的内存
(1) 系统内存分配示意图

(2) 程序的内存映像
1)堆:用于存放函数参数值,函数返回地址,非静态局部变量的值。
2)栈:由程序员分配释放,如果程序员不释放,程序结束后由os回收
3)全局区(静态区):全局变量和静态变量存储在此处,初始化的放在一块区域,未初始化的放在相邻的另一块区域BSS。
4)数据段:常量字符串放在这个区域。
5)代码段:存放函数体的二进制代码。

字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处(由右向左),高字节数据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处(由左向右)。

4. 指针

(1)* 和 & 区别
*是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带*。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上*,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带*,给指针变量赋值时不能带。

float a = 1.1;
int b = 1.2;
float *p1 = &a;  # p 存放a的地址 *p存放a值
int *p2 = &b;
#改变指针内容
p1 = &a;
p2 = &b;

(2)* 不同场景下的使用
*在不同的场景下有不同的作用:可以用在指针变量的定义中,表明这是一个指针变量,以和普通变量区分开;使用指针变量时在前面加表示获取指针指向的数据,或者说表示的是指针指向的数据本身。

int *p = &a;
*p = 100;

(3) 数组指针
http://c.biancheng.net/view/1993.html
(4) 函数指针:(*函数名)(参数的类型 参数)
int (*pquadrate) (int a) = &quadrate;

Array数组其实是一种指针常量,而p则是一种指针变量(数组和指针有一定的通用性,又有一定的差别,指针可以表达数组,而数组不可以表达指针);
p++:指针偏移,运行效率比数组高;

(5) 指针运算,遍历

Third Week :Linux下的C语言相关推荐

  1. Mysql —— linux下使用c语言访问mySql数据库

    示例1: #include<stdio.h> #include<mysql.h> int main() { MYSQL mysql; mysql_init(&mysql ...

  2. linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程

    linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程 server.c #include <sys/stat.h>#include <fcntl.h> ...

  3. linux c语言 信号,linux下基于C语言的信号编程实例

    搜索热词 本文实例讲述了linux下基于C语言的信号编程方法.分享给大家供大家参考.具体如下: #include #include #include #include #include void si ...

  4. Linux下C语言串口应用编程,Linux下串口C语言编程

    Linux下串口C语言编程 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 串口操作代码#include #include #inclu ...

  5. c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...

    求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束 /* 以下是主要的逻辑代码,还有些.c和.h就没发了 ...

  6. 在Linux下开发多语言软件: Hello GetText!

    在Linux下开发多语言软件: Hello GetText! 转自:http://www.groad.net/bbs/read.php?tid-906.html 开发多语言软件是一件非常困难的事,各个 ...

  7. 实验linux下的编程,实验四 Linux下的C语言编程;

    <实验四 Linux下的C语言编程;>由会员分享,可在线阅读,更多相关<实验四 Linux下的C语言编程;(5页珍藏版)>请在人人文库网上搜索. 1.实验四Linux 下的 C ...

  8. linux下的C语言编程(总结篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在Linux下面关于C语言的内容其实挺多的.不同的人关注的地方也不一样.关注系统设计的人可能更 ...

  9. linux下的c语言编程实验4,实验四-Linux下的C语言编程

    实验四Linux 下的 C 语言编程 四.实验内容 本实验要求在LINUX/UNIX环境下用C语言编写三个具体的SHELL命令,基本涉及了LINUX/UNIX文件系统中较为常用的有关文件操作的系统调用 ...

最新文章

  1. C语言判断挂科,并输出挂科学生的全部成绩!_只愿与一人十指紧扣_新浪博客
  2. 炸!亿级数据DB秒级平滑扩容!!!
  3. 网站502与504错误分析
  4. MyEclipse自定义servlet模板
  5. html溢出宽度控制,html - 具有固定宽度列的HTML / CSS表(如果内容溢出,则滚动) - 堆栈内存溢出...
  6. 判断两条链表是否交叉,若有交叉,返回交叉节点的指针。
  7. 启动jboss_3种启动JBoss BPM流程的基本方法
  8. ubuntu mysql 防火墙_mysql、ubuntu系统防火墙常规操作
  9. JimuReport积木报表,一个好用的开源免费的报表平台!
  10. centos安装python gcc sqlite
  11. 4KB/4MB 32位分页模式下的线性地址翻译以及CR3
  12. 【电脑帮助】解决Wind10系统照片中自带的保存的图片和本机照片的问题
  13. 扩容效率提升10倍,腾讯云发布一站式资源运维利器TIC
  14. 51nod1464(trie + dfs)
  15. 【动态规划】LeetCode 62. Unique Paths
  16. linux检查python安装情况,使用Python检测Linux服务器连接状态
  17. jq怎么更换json对象的key_toString如何转json
  18. hex对ARP和IP、ICMP数据包的分析
  19. python发送短信验证码(互亿无线)
  20. 【密码学 | CTF】培根密码

热门文章

  1. 【Verilog】基于Nexys4DDR开发板实现数字钟
  2. 基于FPGA的通用8251串行异步收发器(6600+字)
  3. /usr/bin被删除的操作
  4. Android记录24-WebView实现白天/夜间阅读模式
  5. Sublime Text 3 MarkdownEditing布局设置
  6. JQuery 获取节点
  7. shell基础二:查找技巧,find及xargs的使用
  8. 10个利用Eclipse调试Java的常见技巧
  9. 微软新闻:英雄由此诞生
  10. libcurl 域名解析分析