linux下的C语言

测试环境

首先我们需要安装linux系统,可以选择虚拟机或者双系统来安装,新手推荐使用ubuntu(有很好的图形化界面,简单容易上手)。

linux下如何运行C语言程序

C语言是面向过程的语言,特点就是快,很快!

下面是一段简单的C语言程序

/*test.c*/
#include<stdio.h>
int main() {
    printf("Hello World!"); //打印字符串Hello World!
}

在windows系统中你可能直接使用编译软件运行该程序

而在linux系统中首先需要进行编译,然后再运行编译后的文件

$ gcc test.c -o test.out //编译文件
$ ./test.out //运行编译后的文件
/*Hello World!*/

如何使用include引入代码段

/*test.c*/
#include<stdio.h>
int min(int a,int b){//得到最小值
        if(a>b){
                return b;
        }
        return a;
}

int max(int a,int b){//得到最大值
        if(a<b){
                return b;
        }
        return a;
}

int main() {
        int a = min(10,5);//a=5
        int b = max(10,5);//b=10
        printf("min=%d,max=%d\n",a,b);
}
/*test1.c*/
#include<stdio.h>
int max(int a,int b){//得到最大值
        if(a<b){
                return b;
        }
        return a;
}

int main() {
        int a = max(23,50);//a=50
        printf("max=%d\n",a);
}

两个程序都用了同一个方法,而我们却要写两遍!

我们要偷懒!我们是不是可以将min和max函数提取出来呢?

下面我们准备两个文件min.c和max.c

/*min.c*/
int min(int a,int b){//得到最小值
        if(a>b){
                return b;
        }
        return a;
}
/*max.c*/
int max(int a,int b){//得到最大值
        if(a<b){
                return b;
        }
        return a;
}

现在我们修改一下test.c和test1.c文件

/*test.c*/
#include<stdio.h>
#include"min.c"//引入min函数
#include"max.c"//引入max函数

int main() {
        int a = min(10,5);//a=5
        int b = max(10,5);//b=10
        printf("min=%d,max=%d\n",a,b);
}
/*test1.c*/
#include<stdio.h>
#include"max.c"//引入max函数

int main() {
        int a = max(23,50);//a=50
        printf("max=%d\n",a);
}

编译一下
在这里插入图片描述

并不是每个文件都要一起编译

之前我们引入的是max.c和min.c文件,我门能现将这两个文件编译好再引入吗?

$ gcc -c max.c -o max.o //将max.c先进行预编译
$ gcc -c min.c -o min.o //将min.c先进行预编译

再准备一个头文件head.h

int min(int a,int b);
int max(int a,int b);

让我们再修改一下test.c

/*test.c*/
#include<stdio.h>
#include"head.h"//引入头文件

int main() {
        int a = min(10,5);//a=5
        int b = max(10,5);//b=10
        printf("min=%d,max=%d\n",a,b);
}

在这里插入图片描述

每部分都要去单独编译?要是有很多个程序代码段呢

机智的人已经开始用工具了,比如 Makefile

创建Makefile文件(必须命名为Makefile)

#this is a Makefile
test.out:min.o max.o test.c
        gcc min.o max.o test.c -o test.out
min.o:min.c
        gcc -c min.c
max.o:max.c
        gcc -c max.c

使用make命令执行

安装make(先看看有没有自带安装好的)

$ sudo apt-get install make

在这里插入图片描述

关于读写流和错误流

我们所使用printf和scanf的是已经封装好的,下面才是它们原来的样子

新建文件test.c

#include<stdio.h>
int main() {
    int a;
    fscanf(stdin,"%d",&a);//输入
    if(a != 0) {
        fprintf(stdout,"a=%d\n",a);//输出
        return 0;
    }else {
        fprintf(stderr,"error\n");//输出错误
        return 1;
    }
}
$ echo $? //可以查看返回值(return)

在这里插入图片描述

黑窗口很烦,就喜欢文本编辑(流的重定向)

新建input.txt文件

/*input.txt*/
5
4
0

修改test.c文件

#include<stdio.h>
int main() {
    int a;
    int flag = 1;
    while(flag){
        fscanf(stdin,"%d",&a);//输入
        if(a != 0) {
            fprintf(stdout,"a=%d\n",a);//输出
        }else {
            fprintf(stderr,"error\n");//输出错误
            flag = 0;//更改flag,停止循环
        }
    }
}

在这里插入图片描述

使用 < 可以改变输入流的重定向
使用 > 可以改变输出流的重定向
/*
其中 1> 代表正常输出
    2> 代表错误输出
*/

在这里插入图片描述

最后说说管道(顾名思义,就是传输信息用的通道)

| 就是所谓的管道符号

最简单的例子就是查找信息了

比如在刚才print.txt中查找相关信息
在这里插入图片描述

$ cat print.txt//得到文件内容
/*通过 | 管道符传输信息个给grep命令查找原信息中符合条件的信息*/
$ cat print.txt | grep 4

通过这些方法的灵活运用,你就可以发挥自己的想象力写一个小工具哦,欢迎大家在评论区分享。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
反汇编Linux/Windows OS运行的32位/64位程序/动态库文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有CORE文件解调用栈、文本比较等功能。V2.0.3相对上一版本,完善ARM64、X8664、PPC64反汇编、ko反汇编,完善反汇编文本文件比较、IQ数据解析,修复小BUG;V2.0.2相对上一版本,完善ARM64、X8664反汇编、ARM64位core文件调用栈,完善文本文件比较、增加高亮、查找功能,修复小BUG;V2.0.0相对上一版本,完善ARM64反汇编、ARM64位core文件调用栈,完善C++符号名字解析,支持工具运行在英文版OS;V1.26.01相对上一版本,增加ARM64反汇编、64位core文件解析;V1.26.00相对上一版本,增强EXE反汇编,增加dbx老邮件解析、二维码功能;V1.25.07相对上一版本,增加二进制反汇编、IQ数据解析功能,完善MIPS反汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值