测试环境
首先我们需要安装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