测试环境

首先我们需要安装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);
}

编译一下

Linux运行Unity exe linux运行c语言程序_linux

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

之前我们引入的是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);
}

Linux运行Unity exe linux运行c语言程序_linux_02

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

机智的人已经开始用工具了,比如 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

Linux运行Unity exe linux运行c语言程序_linux_03

关于读写流和错误流

我们所使用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)

Linux运行Unity exe linux运行c语言程序_重定向_04

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

新建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,停止循环
        }
    }
}

Linux运行Unity exe linux运行c语言程序_#include_05

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

Linux运行Unity exe linux运行c语言程序_重定向_06

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

| 就是所谓的管道符号

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

比如在刚才print.txt中查找相关信息

Linux运行Unity exe linux运行c语言程序_重定向_07

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

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