-
用#include相当于复制进项目,这样编译起来很慢。把依赖的文件先编译成.o文件(0101之类的机器码)再编译主函数效率要高。查看全部
-
>(覆盖) >>(追加) 并且这个输出流重定向必须要求输出到terminal(终端),即标准输出到stdout fprintf(标准输出流)stdout fscanf(标准输入流)stdin fprintf(标准错误流)stderr查看全部
-
安装一个软件查看全部
-
C语言适合: 1. 小工具 2. 和硬件打交道的程序 3. 有高性能要求的应用程序查看全部
-
1.在Linux里面不要写void main() 2.x表示可执行 3. “./”表示当前路径下(可执行文件)查看全部
-
1.sudo 表示用管理员权限<br> 2.clear 表示清理屏幕<br> 3.pwd 表示查看当前所在路径<br> 4.ls-l显示当前目录下所有文件的详细信息<br> 5.mkdir创建文件夹<br> 6.cd 表示进入某个文件夹(相邻文件夹之间用/分开) 7.sudo apt-get install + 软件名称 (安装程序)<br> 8.sudo apt-get update (更新资源)<br> 9.sudo apt-get install vim (安装VIM)<br>查看全部
-
把不常改动的函数编译好,存储为静态库,在主函数编译链接时节省很多时间查看全部
-
:set nu可以看到代码行号查看全部
-
变量名和函数不能重复,否则会导致错误查看全部
-
【编写使用管道的程序】 我们在文件夹下,c语言做的每个程序都有一个独立的功能,我们可以将多个小程序使用管道连接到一起。 我们现在写一个程序avg.c,求任意个数的平均值: #include <stdio.h> int main() { int s, n; scanf("%d,%d", &s, &n); float v = s / n; printf("v = %f\n", v); return 0; } 退出vim进行编译cc avg.c -o avg.out,我们得到avg.out,我们输入3000,3。 我们再写一个统计输入的程序input.c: #include <stdio.h> int main() { int flag = 1; int i; int count = 0; int s = 0; while(flag){ scanf("%d", &i); if(0==i) break; count++; s+=i; } printf("%d,%d\n",s,count); return 0; } 我们对这个函数进行编译cc input.c -o input.out,我们输入3000 2000 0,输出总工资5000和人数2。 我们不妨使用以上两个程序结合起来,将所有数据进行统计input.out,之后通过管道经过avg.out计算平均值,命令可以写为./input.out | ./avg.out,然后进行输入,输入完成我们便得到了对应的平均工资。 以上就是通过管道,将两个小程序连接起来得到更复杂的程序的过程。查看全部
-
【管道原理及应用】 Linux系统自带的小工具如何使用,其实这些小工具就是一个应用程序,比方说ls /查看根目录,比方我们要查找某个目录下有多少个文件名包含“ab”,我们可以写ls /etc/ | grep ab,其中这个竖线就是管道的意思,grep是从文本文档中查找指定的行(其实可用于文本搜索)。 将我们前一个程序执行输出流,通过管道得到我们需要的内容。通过管道我们就可以使用很多自动化的方法,管道的应用还有很多。 例如,ps可以查看当前的进程,我们想查看我们当前操作系统是否开启ssh进程,我们可以使用命令ps -e | grep ssh,查看所有进程中是否包含ssh服务的,若有我们便可以进行连接。查看全部
-
假设有很多.c以及.o文件的时候,我们就需要gcc后面跟一串.c文件等等,那么我们是否有很方便的命令来提高效率呢? make工具就可以很清晰和快速的将文件进行整理,make内部使用了gcc。 首先我们检查一个我们是否安装了make工具(使用命令 make -v,若安装则显示安装信息,版本号码,若未安装,我们使用命令sudo apt-get install make)。 我们约定一个文件makefile来进行我们之前写过的文件进行配置。 makefile文件中可以写注释,以井号开头。 hello.out是我们的目标文件,但其中需要max.o,min.o,hello.c这三个文件,我们在makefile写下: # this is make file。注意 hello.out:max.o min.o hello.c gcc max.o min.o hello.c # 同时我们写出max.o的文件来源 max.o:max.c gcc -c max.c min.o:min.c gcc -c min.c 删除以o为后缀的文件:rm *.o 最上面的文件是我们最终需要的文件hello.out,同时它是由max.o,min.o,hello.c,同时我们再给出这三个文件锁依赖的文件(其实就是递归),找到各自的生成的源头文件。若最后我们没有在gcc中指定输出名称,则最后使用make命令(也就是直接命令make回车),就生成a.out文件,若要指定生成的文件名,我们就可以使用修改Makefile文件内的代码(改为gcc max.o min.o hello.c -o hello.out)。 此外,还需要注意的是,在Makefile文件中,我们gcc命令前需要有6个空格(即一个TAB键),若不是6个空格,则在使用make命令时,则会报错导致无法生成out文件等。查看全部
-
【更深入了解c语言在linux下的交互】 建立一个main.c文件 #include <stdio.h> int main(int argv, char* argc[]) { printf("hello world!\n"); return 0; } 我们使用命令 gcc main.c -o main.out && ./main.out linux通过&&符号将两个指令作为一个指令输出了,但是linux是如何确定第一条指令是否正确输出了呢? 我们再次使用./main.out,然后可以使用命令echo $?,若返回0则说明程序正常,但是若为别的数字则说明程序执行失败了,返回的是一个错误码(好比windows下蓝屏了,就会返回一个错误码)。 返回正确则会返回0,是因为我们的程序里面最后写的是return 0,但当我们将这个return 0改为reutrn 101后,我们再使用指令echo $?,发现返回的是101。 【关于return 0和命令连接符&&】 我们分别对main.c程序进行修改(return后一个为0,一个为101),分别生成main.o和main2.o文件。 return 0:gcc main.c -o main.o return 101:gcc main.c -o main2.o 之后我们使用命令./main.o && ls和./main2.o && ls,发现前者即返回hello world!同时显示了当前的目录(其中ls为显示当前目录命令),但是后者却只返回hello world!,即&&符号后面的语句没有执行。我们两个命令执行后,分别执行echo $?命令,前者返回0,后者返回101。 我们知道&&是and操作,需要前一句执行正确才能执行and(即&&)后面的内容。对于上面的那个例子,我们不禁可以推断出,0在linux下即为(程序执行)正确的意思,因此才会执行&&后面的ls命令。查看全部
-
【main函数中的参数】 我们使用命令cp main.c main2,c,复制并创建一个main2.c文件: #include <stdio.h> int main(int argv, char* argv[]) { print("argv is %d \n", argv); return 0; } 我们在使用命令cc main2.c -o m2.out进行编译,执行./m2.out命令,有“argv is 1” 对于ls我们可以在此命令上加参数,例如: 显示更多的文件信息:ls -l 显示隐藏的文件信息:ls -a 那么,同理,我们也可以对./m2.out这个可执行文件加参数。分别执行如下命令并观察输出: ./m2.out,输出为“argv is 1” ./m2.out -l,输出为“argv is 2” ./m2.out -l -a,输出为“argv is 3” 我们可以观察到,加不同个数的参数,argv返回对应参数的值,我们不仅要知道几个参数,我们还可以知道每个参数是什么,我们将程序进行修改,加上如下一段代码: int i; for(i=0; i<argv; i++) {//在vs或者xcode里,可以在for内声明int i,但是在c98下不能这么写,会报错,是因为版本的问题 printf("argc[%d] is %s\n", i, argc[i]); } 这时,我们再编译gcc main2.c -o m3.out,运行./m3.out -l -a asadf sdfd有如下显示: argv is 5 argc[0] is ./m2.out argc[1] is -l argc[2] is -a argc[3] is asadf argc[4] is sdfd 以上内容和linux,unix联系非常紧密,尤其是在linu嵌入式,linux小工具的开发,以及linux的网络编程,都是很重要的内容。查看全部
-
【标准输入流,输出流,错误流】 现在有cio.c文件: #include <stdio.h> //标准输入输出 /* stdin stdout stderr */ int main() { printf("hello world!\n"); //输出功能由标准输出流完成,printf是系统封装后的 int a; scanf("%d", &a); //标准输入流,错误流是系统出错的时候的 printf("input value is : %d\n", a); return 0; } 在我们输入a.out时,当程序执行的一瞬间,系统给程序提供了一个进程,当程序启动时,系统也提供给程序一系列的指针。linux将所有的外设(摄像头,打印机云云)也罢等等,都视为文件。当启动应用程序时候,也当文件操作,会产生三个文件(stdin,stdout,stderr,即标准输入,输出,错误流)。 默认情况下,输入流就是键盘,stdout也可以切换默认为显示器,我们可以切换为网卡或者打印机,错误流同理。我们在启动文件的时候,都会产生这三个文件。 printf函数是一个封装过的函数: printf("Please input the value a:\n"); fprintf(stdout, "please input the value a:\n"); 因为stdout默认是显示器,上两句就是等价的,printf其实就是fprintf封装后得到的。 同样,我们也有scanf和fscanf的关系(下面两句是等价的): scanf("%d", &a); fscanf(stdin, "%d", &a); 同样,我们也有错误流: if(a<0){ fprintf(stderr, "the value must > 0\n"); return 1; } return 0; 如何让程序知道出错了,我们通过返回值1和0体现,再次编译cc cio.c -o a2.out,我们运行a2.out,输入2则正常执行,当输入-1,则有我们对应的提示,即错误流就发挥作用了。 其实Linux一个很大的系统,就是由这些类似的小工具完成的,当等于0是为正确,错的话为其他值。当然,标准的输入流,输出流,以及错误流也可以重定向。查看全部
举报
0/150
提交
取消