在windows下,c语言的主函数默认有两个参数; 很多人会惊奇,这是什么,好像从没有听说过???? 我们在写C代码的时候都是习惯性的新建空项目然后自己添加.cpp文件,但是可能有部分人习惯直接新建控制台程序,然后可能就会看到这么一段代码,其实两个参数是负责接收指令行参数的,很多在linux gcc或者g++下编译过c程序的人都知道他的指令格式是:
gcc 源文件名 -o 生成文件名
ps -f也是这个道理。 在Linux下,我们的主函数是有三个参数的:
int main(int argc,char *argv[],char * envp)
我们可以看到如下的执行结果:
也就是主函数拿到的第一个参数就是:当前程序的路径全名称
上述指令中,hello和123都是传给主函数的参数,都是以字符串的形式接收 因此,若写成下面的形式,参数就发生了变化: 我们加入环境变量的输出: envp的最后一个参数是空指针。 如下图所示,显示了部分的环境变量: 然后,我们增加一个自己的环境变量,命令如下: 总是,对于主函数参数的学习就到这里,实际上bash是main的父进程,bash帮我们把main进程运行起来,我们在bash中新增加了一个环境变量,所以main运行,会得到MYSTR这个环境变量。
向屏幕输出显示信息时,C语言会使用printf方法,但实际上,它不会将输出结果直接输出到屏幕上,首先是将其要输出的内容写入到缓冲区中,待缓冲区放满后,就会把缓冲区的内容输出到屏幕上。 设立隐藏缓冲区的原因: ——效率,printf输出的内容要打印到屏幕上,是需要调用系统接口来完成的,屏幕是硬件设备,是由操作系统来管理的,因此它在输出时需要调用系统接口来完成,也就需要从用户态切换到内核态,如果我们多次调用printf,那么就会在这两种状态之间来回切换,造成很大的开销。 只有满足以下三种情况之一,才会将缓冲区中的内容输出到屏幕:
fflush(stdout)
\n
exit(0)
_exit(0)