Linux下的正确用法应该是这样的(当然,只是其中之一的“正确用法”):
#完成程序
#不退出vi,继续:e Makefile,完成Makefile的编写
#(继续不退出vi,下同):make 编译程序,并完成代码修改
:e .gdbinit,编写gdb脚本,比如加上file hello, break the_hellp_function; run等命令
#^A c创建新的窗口
#运行,调试程序,并通过^A ^A切换窗口
这个效率肯定比你在Windows下大部分工具都高,这就是Unix的思想(之一)——所有重复的动作,全部用脚本解决。你不会的时候当然GUI效率高,你会的时候,当然是脚本效率高,因为所有重复的动作都会变成一个动作。
好了,我们进一步深入进去。现在我问个问题,你的hello world程序调用了一个printf,这个printf是哪里定义的?如何实现的?你既然学习C语言,总得知道它是怎么工作起来的吧?在Windows的GUI程序封装下,你怎么知道你的程序是怎么编译出来的呢?
在Ubuntu下,你可以这样:
这样你完整地知道整个编译,汇编,链接过程是怎么样的,你甚至可以要求留下中间的任何一个结果,以供分析。
或者你可以简单做这个动作来看printf是哪里定义的:
你会发现printf调的是puts,在比如/lib/x86_64-linux-gnu/libc.so.6中定义的。知道这个文件是哪个,你可以可以查找它所在的包:
知道是哪个包,你可以直接下载它的源代码:
然后你就可以开始修改这个代码,重新编译它,调试或者运行整个程序了…
看到了吗?使用Linux,你手中的整个操作系统,包括支持你运行C语言的一切工具的源代码,都是对你公开的。你问为什么学习C语言要用Linux?这就是原因,你将有一个完全敞开的语言世界。
最后,如果你学的是C语言,C语言在Windows下早就式弱了,只有在Linux中才生生不息,这里有最浓厚的C语言文化,autotool等原生工具会告诉你C语言的跨平台历史和恩怨,而这些历史,在Windows上已经泯灭了。
这怎么说呢?C语言的libc的原始接口,在Windows下大部分都不再使用了,你不再用malloc来分配内存,你会更多使用HeapAlloc一类的接口(当然,不是说malloc不能用。但那更多是为了兼容,而不是开始就这样设计的,下同),你也不用pthread_create来创建线程了,你用CreateThread(),实际上,大部分Windows的用户程序微软并不建议你用C来写,所以你在Windows下学习C,也没有什么太多实际的价值,因为本来就不预期你这样用。而Linux下是不同的,Linux很多基本程序就是指望你用C来写的。
所以,题主问“学C语言最好的平台”,我想,真的是Linux无疑了,这不是基于情怀,这是基于成本和收益的。