linux c 编程,新手求指教!最好有linux 源代码分析!

linuxc语言编程:Linux下C语言编程基础知识
阅读:407次&&&时间: 18:26:22&&
  1.源程序的编译    在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器.    假设我们有下面一个非常简单的源程序(hello.c):    int main(int argc,char **argv)    {    printf("Hello Linuxn");    }      要编译这个程序,我们只要在命令行下执行:    gcc -o hello hello.c    gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程序的输出结果了.命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.    gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了. -o选项我们已经知道了,表示我们要求输出的可执行文件名. -c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件. -g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息.    知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明.    2.Makefile的编写    假设我们有下面这样的一个程序,源代码如下:      /* main.c */    #include "mytool1.h"    #include "mytool2.h"      int main(int argc,char **argv)    {    mytool1_print("hello");    mytool2_print("hello");    }      /* mytool1.h */    #ifndef _MYTOOL_1_H    #define _MYTOOL_1_H      void mytool1_print(char *print_str);      #endif      /* mytool1.c */    #include "mytool1.h"    void mytool1_print(char *print_str)    {    printf("This is mytool1 print %sn",print_str);    }      /* mytool2.h */    #ifndef _MYTOOL_2_H    #define _MYTOOL_2_H      void mytool2_print(char *print_str);      #endif      /* mytool2.c */    #include "mytool2.h"    void mytool2_print(char *print_str)    {    printf("This is mytool2 print %sn",print_str);    }        当然由于这个程序是很短的我们可以这样来编译    gcc -c main.c    gcc -c mytool1.c    gcc -c mytool2.c    gcc -o main main.o mytool1.o mytool2.o    这样的话我们也可以产生main程序,而且也不时很麻烦.但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我去完成不就可以了.是的对于这个程序来说,是可以起到作用的.但是当我们把事情想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译?    为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make.我们只要执行以下make,就可以把上面的问题解决掉.在我们执行make之前,我们要先编写一个非常重要的文件.--Makefile.对于上面的那个程序来说,可能的一个Makefile的文件是:    # 这是上面那个程序的Makefile文件    main:main.o mytool1.o mytool2.o    gcc -o main main.o mytool1.o mytool2.o    main.o:main.c mytool1.h mytool2.h    gcc -c main.c    mytool1.o:mytool1.c mytool1.h    gcc -c mytool1.c    mytool2.o:mytool2.c mytool2.h    gcc -c mytool2.c      有了这个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件她连理都不想去理的.    下面我们学习Makefile是如何编写的.    在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明.一般的格式是:    target: components    TAB rule      第一行表示的是依赖关系.第二行是规则.    比如说我们上面的那个Makefile文件的第二行    main:main.o mytool1.o mytool2.o    表示我们的目标(target)main的依赖对象(components)是main.o mytool1.o mytool2.o 当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令.就象我们的上面那个Makefile第三行所说的一样要执行 gcc -o main main.o mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键    Makefile有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:    $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件.    如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:    # 这是简化后的Makefile    main:main.o mytool1.o mytool2.o    gcc -o $@ $^    main.o:main.c mytool1.h mytool2.h    gcc -c $<    mytool1.o:mytool1.c mytool1.h    gcc -c $<    mytool2.o:mytool2.c mytool2.h    gcc -c $<      经过简化后我们的Makefile是简单了一点,不过人们有时候还想简单一点.这里我们学习一个Makefile的缺省规则    .c.o:    gcc -c $<      这个规则表示所有的 .o文件都是依赖与相应的.c文件的.例如mytool.o依赖于mytool.c这样Makefile还可以变为:    # 这是再一次简化后的Makefile    main:main.o mytool1.o mytool2.o    gcc -o $@ $^    .c.o:    gcc -c $<      好了,我们的Makefile 也差不多了,如果想知道更多的关于Makefile规则可以查看相应的文档.    3.程序库的链接    试着编译下面这个程序      /* temp.c */    #include       int main(int argc,char **argv)    {        printf("Valuefn",value);    }      这个程序相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误.    /tmp/cc33Kydu.o: In function `main':    /tmp/cc33Kydu.o(.text+0xe): undefined reference to `log'    collect2: ld returned 1 exit status      出现这个错误是因为编译器找不到log的具体实现.虽然我们包括了正确的头文件,但是我们在编译的时候还是要连接确定的库.在Linux下,为了使用数学函数,我们必须和数学库连接,为此我们要加入 -lm 选项. gcc -o temp temp.c -lm这样才能够正确的编译.也许有人要问,前面我们用printf函数的时候怎么没有连接库呢?是这样的,对于一些常用的函数的实现,gcc编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了. 有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的 -L选项指定路径.比如说我们有一个库在 /home/hoyt/mylib下,这样我们编译的时候还要加上 -L/home/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径.    还有一个问题,有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法.首先,我到标准库路径下面去找看看有没有和我用的函数相关的库,我就这样找到了线程(thread)函数的库文件(libpthread.a). 当然,如果找不到,只有一个笨方法.比如我要找sin这个函数所在的库. 就只好用 nm -o /lib/*.so|grep sin>~/sin 命令,然后看~/sin文件,到那里面去找了. 在sin文件当中,我会找到这样的一行libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin在 libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面的lib和后面的版本标志,就剩下m了所以是 -lm). 如果你知道怎么找,请赶快告诉我,我回非常感激的.谢谢!    4.程序的调试    我们编写的程序不太可能一次性就会成功的,在我们的程序当中,会出现许许多多我们想不到的错误,这个时候我们就要对我们的程序进行调试了.    最常用的调试软件是gdb.如果你想在图形界面下调试程序,那么你现在可以选择xxgdb.记得要在编译的时候加入 -g选项.关于gdb的使用可以看gdb的帮助文件.由于我没有用过这个软件,所以我也不能够说出如何使用. 不过我不喜欢用gdb.跟踪一个程序是很烦的事情,我一般用在程序当中输出中间变量的值来调试程序的.当然你可以选择自己的办法,没有必要去学别人的.现在有了许多IDE环境,里面已经自己带了调试器了.你可以选择几个试一试找出自己喜欢的一个用.      5.头文件和系统求助    有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得着函数在那个头文件进行了说明.这个时候我们可以求助系统.    比如说我们想知道fread这个函数的确切形式,我们只要执行 man fread 系统就会输出着函数的详细解释的.和这个函数所在的头文件说明了. 如果我们要write这个函数的说明,当我们执行man write时,输出的结果却不是我们所需要的. 因为我们要的是write这个函数的说明,可是出来的却是write这个命令的
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
Copyright &
All Rights Reserved相关文章推荐:
linux c 源代码
Linux编程之路vampirelifan发表于:4:07来源:远景无限建议学习路径:首先先学学编辑器,vim,emacs什么的都行。然后学makefile文件,只要知道一点就行,这样就可以准备编程序了。然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。如果想学习UNIX/LINUX的编程-&《APUE》绝对经典的教材,加深一下功底,学习《UNP》的第二卷。这样基本上系统方面的就可以掌握了。然后再看er的《用TCP/IP进行网际互连》第一卷,学习一下网络的知识,再看《UNP》的第一卷,不仅学习网 ...
其他文章推荐
auction...
回复 (617)
OReilly.Classic.Shell.Scripting**** 本内容被作者隐藏 ****...
回复 (604)
auction...
回复 (551)
精通Oracle10g数据库管理**** 本内容被作者隐藏 ****[本帖最后由Send_linux于7:38编辑]...
回复 (548)
使用编辑软件ultraedit-32打开ZWCAD.EXE主文件,然后搜索FFD7595950,找到后将50改为51保存退出.然后运行中望CAD,点击注册,随便填入数字,点击注册即可成功!!,适用于中望全系列标准版,专业版,中望结构。注意:cad2008专业版要注册2次,第2次是给3D模块注册。IT168的中望200 ......
aHead,Neck&ShoulderbeijingmassageAtlantis,ThePalmtransportsguestsintoadazzling,imaginativeworld,theresortencompassesa46hectaresitewith17hectaresofwaterthemedamusementatAQUAVENTURE,extensivefreshandsalt-waterpoolsandlagoonexhibits,anopen-airedmarine ......
花了几天的时间,分析了神州数码的拨号客户端,弄清了认证过程,加密算法。并自己写了个Windows得客户端。。。。。。既然是自己写的,当然不会加入检测NAT,代理等功能。。。^_^他的算法不难,但逆向过程不轻松^_^有需要的可以和我联系:&(2005/10)最 ......
谈到自己学习SKYCC软件的体会,最大的感触是SKYCC老大的为人,当然这只是从感情的角度来感悟的,但是我觉得一个人的道德品质,也将印象周围的一批人;我就是被这样感动着的一个人。学习SKYCC软件差不多半年的时间了,从开始的抵触的情绪到现在极力维护SKYCC软件,从成绩 ......
&&&&告诉大家一个好消息,今天CU终于推出“用WindowsLiveWriter离线写博文”的功能了,让大家久等了。赶紧来试试它好不好用了啊。&特别提醒:为了保证博文的原创性,在使用线下写博文的时候,请您在您的博文标题后加上【转载|自建文件夹名称】 ......
百年难遇的670CPU故障..上周被我遇到了........欲哭无泪.刚准备去巡检,途中接到报障电话,称670死机了.无法启动.....迅速赶到现场发现在91FF就停住了.然后就不断的重启...又到91FF又停住了好一会又重启....仔细观察发现有时LED停止在E51F...等了好久.终于等到了.产生了代 ......
文章推荐:
盛拓传媒:
友情链接:
特别鸣谢:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
CHINAUNIX推荐文章解答你所有技术难题路过可以看:会基于Linux下的C编程的,可以写以下编程吗?代码发送到QQ邮箱谢谢!一、文件I&#47;O_百度知道
路过可以看:会基于Linux下的C编程的,可以写以下编程吗?代码发送到QQ邮箱谢谢!一、文件I&#47;O
一、文件I&#47;O 程序设计.1、项目要求如下:(1)任意输入20及以上个字符到文件中”&#47;root&#47;test&#47;file&#47;1_2_1.txt”中;(2)从文件”&#47;root&#47;test&#47;file&#47;1_2_1.txt”中读取数据,并统计每个字母出现的次数,输入到终端(注意:大小写字母算同一字符,不存在的字母不输入);(3)程序保存在”root&#47;test&#47;programs&#47;1_2.c”中。
输出实例:
……程序代码:二、进程间通信程序设计.1、项目要求如下:(1)使用无名管道实现兄弟进程间的互相通信;(2)程序保存在”&#47;root&#47;test&#47;programs&#47;2_1.c”。程序代码三、网络程序设计.1、项目描述:使用流式SOCKET实现两台主机间的文件传输,具体要求如下:服务器端程序功能描述如下:(1)监听网络中的连接请求;(2)输入”&#47;root&#47;test&#47;file&#47;”下的任意一个文件名;(3)将文件中的内容通过管道发送至客户机端;(4)程序保存在”&#47;root&#47;test&#47;file&#47;3_1_server.c”中客户机端程序功能描述如下:(1)输入服务器端IP地址,并请求连接;(2)输入一个文件路径,如:&#47;root&#47;test&#47;file&#47;3_1.txt,并创建该文件,用于保存服务器端发来的文件;(2)接受服务器端发来的文件数据,保存至刚创建的文件中;(3)程序保存在”&#47;root&#47;test&#47;programs&#47;3_1_client.c”中。程序代码:服务器端:客户机端:
写好也可以发送在这里,满意加财富.
我有更好的答案
按默认排序
不会 觉得楼主去该贴吧求助会有人帮忙的吧我们都不会 有心无力
其他类似问题
linux的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Linux C创建多级目录代码_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Linux C创建多级目录代码
来源:Linux社区&
作者:jaymade
Linux C创建多级目录代码:
int&CreateDirectoryEx(&char&*sPathName&)&&
&&&&char&DirName[256];&&&&&&
&&&&strcpy(DirName,sPathName);&&&&&&
&&&&int&i,len&=&strlen(DirName);&&&&&&
&&&&if(DirName[len-1]!='/')&&&&&&
&&&&strcat(DirName,"/");&&&&&&&&&&&&
&&&&len&=&strlen(DirName);&&&&&&
&&&&for(i=1;i&i++)&&&&&&
&&&&{&&&&&&
&&&&&&&&if(DirName[i]=='/')&&&&&&
&&&&&&&&{&&&&&&
&&&&&&&&&&&&DirName[i]&=&0;&&&&&&
&&&&&&&&&&&&if(access(DirName,NULL)&!=&0)&&&&&&
&&&&&&&&&&&&{&&&&&&
&&&&&&&&&&&&&&&&if(mkdir(DirName,0777)&==&-1)&&&&&&
&&&&&&&&&&&&&&&&{&&&&&&&
&&&&&&&&&&&&&&&&&&&&perror("mkdir&error");&&&&&&&
&&&&&&&&&&&&&&&&&&&&return&-1;&&&&&&&
&&&&&&&&&&&&&&&&}&&&&&&
&&&&&&&&&&&&}&&&&
&&&&&&&&&&&&DirName[i]&=&'/';&&&&&&
&&&&&&&&&}&&&&&&
&&}&&&&&&&&
&&return&0;&&&&&&
相关资讯 & & &
& (07月26日)
& (07月26日)
& (10月12日)
& (07月26日)
& (07月08日)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款在Linux下学习C语言有什么好处?
看到很多大牛说在linux下学习C语言比较好,我是初学者,在windows和linux平台下都试过了,比如,我在windows下,用的dev c++,写好源代码后,按F11,自动编译,运行,我检查下结果是否正确。在linux下,我调用vim hello.c来编写源代码,然后:wq退出,然后调用gcc -o hello hello.c来编译,然后./hello运行程序。除了在linux下更麻烦一点,我没有看出在linux下学到了更多的东西啊?我就想问问,我在linux下学习C有什么好处,我感觉更麻烦啊,难道就是为了学那几个命令行吗?
我对C语言懂的不多,不过我想解释一下为什么有人会觉得 Linux 更麻烦。主要的原因, 就是他们还没学会怎么用。就说题主的例子,他是这样做的:vim: wqterminal: g++ hello.c -o hellotermainl: ./hellovim hello.c我希望题主知道这些命令是可以通过方向键找回历史的(真见过有人每次重新输入的)。实际上他可以这样::wqg++ hello.c -o hello && ./hellovim hello.c更快一点, 不用退出 vim:vim: !g++ % -o a && ./a更快一点:vim: map &F11& :!g++ % -o a && ./a&CR&只要执行一次(或者直接放vimrc里面),之后每次按F11就编译运行了。总结起来,当你没有认真去学一样东西的时候,你是很难对它做出客观的评价的。============= Update =====================好像答漏了问题。在 Linux 环境下学习 C 语言有什么好处? 刚开始学其实区别不大,区别在后面会体现出来。当你想看别人的代码是怎么写的时候,在 Github, Sourceforge, Google Code 这些地方能找到大量开源的项目。这些项目,由于C的可移植性,有很多是只能运行在Linux下面的。虽然没有严格统计过, 但我觉得在C开源小项目上, Linux项目的数量是比Windows项目多很多的。另外的好处,就是 Linux 对编程语言的学习较 Windows 有很大优势。你不可能一辈子只学C语言吧? 以后学其他语言的时候,看官网学学语法,然后操起 Vim 就能开干了。例如某天你决定学 Python 了,只需要把 Python 装好(5分钟以内足够) ,打开 Vim,把找来的代码贴进Vim,然后来句 :!python % ... Bom!你感觉自己又学会一门语言了,个中的成就感只有经历过才能体会。反观 Windows 下面的同学,还在究竟IDE的问题:"IDLE 怎么那么难用?“"听说大家都是用 PyCharm 的?“"Visual Studo 也可以用来写 Python 啊""呵呵,我有好多可以选,好开心"以上。
好处就是你能学到很多Linux开发的相关知识坏处就是你学不到Windows开发的相关知识并且你还享用不到Windows下比Linux好用的多的开发环境并且你要是想玩游戏上QQ什么的还得切换回Windows并且你还得忍受Linux难用又不稳定的桌面
用LINUX学习C有什么好处,这个好处你可以看这句话:C就是UNIX,UNIX就是C。UNIX和C语言捆绑的有多紧密,没有C就没有UNIX。LINUX是unix的一个分支,所以,用LINUX学习C有无限多的好处。如果真的把C只认为是一种计算机语言而已,我认为真的错了。在除了UNIX系列上谈C语言,都要谈到一个概念叫C runtime环境,UNIX系统本身就是C runtime环境,这是为什么说用LINUX学习C有很大的好处的根本原因。如果你要谈的是开发环境,我回答的内容和开发环境无关。
很多时候,“学习C语言”指的不是K & R,而是系统编程,。从就业来看,linux的高收入岗位无疑更多。相关书籍或者我个人认为windows系统编程其实后期学习难度更大,因为不开源,你不知道它里面的原理。linux内核是开源的(当然你愿不愿意学习或者能不能看懂是另一回事)系统编程的意义在于:如果你是个c#程序员,想进阶看看CLR via C#,你不懂windows系统编程立马歇菜,只能回头补。如果你是个linux下的php程序员,那些模块很多都是c写的,你不懂linux系统编程,出了问题只能干瞪眼了。学习c的意义在于,便于学习很多其它知识,比如csapp,编译原理,等等。学习linux c的意义在于,你学了linux系统编程方便学java(我指服务器端,不是手机编程)。java的优点在于,好找工作,将来好换工作,工作从几k到几十k的岗位都不少,这点其它语言拍马难及。还有,比语言,c#甩java老远,但是找工作首先是开发软件,服务器端最重量级的软件很多都是java开发的,从楼主学命令行都嫌麻烦的态度看,你直接装个不要钱的Eclipse学java吧,网上安装教程大把,也不用怎么折腾命令行。结论:学习linux c方便毕业找工作(需求最多)。当然你要立志将来像
那样横推各种语言的话,那就另当别论了。==补充========从基础的角度讲 和
以及是我觉得比较重要和实用的。还有,工作中选择什么语言是因地制宜的,很多“应用技术”,比如XXX如何配置,如何调优,如何排错,XXX框架如何使用,等等,都是建立在对系统编程和语言的深入掌握上的,学习算法和体系结构就是为了深入理解语言和操作系统。基础打不牢,遇到问题google不出来只能干瞪眼了。基础才是拉开不同程序员差距的本质原因,基础打牢了,学什么都快。最后,我的回答是建立在假设以后你从事linux系统编程的前提下的。用什么语言,选什么IDE,如果你不想折腾,直接Eclipse CDT吧,vim等你折腾到能像Eclipse那样工作,估计你已经疯了。工具只是锦上添花,能不能提高效率是要靠使用者的,如果你对vim,emacs一窍不通,或者记不住各种IDE快捷键,不会有多大损失(我就不爱折腾),基本功打不牢以后要花很多时间补你就悔之晚矣了。
排名第一的答案有一个前提--"目标是掌握C语言",但是,如果你以后想从事c/c++研发,最好熟悉linux.毕竟现在国内的很多公司的服务器使用的是linux,它们在招聘c/c++程序员的时候,也把"熟悉/精通 linux"作为应聘条件
个人见解,请多指教1. linux != vim (虽然我是 vim 党)linux 下也有很多方便的 IDE。你现在写的代码比较短,我推荐轻量化的 2. linux 系统对于数组越界等错误更加严格
提到,只要你是一个好学的人,相信你不会因为工具称手就学不到东西的。这句话我赞同。不过,我不认为 Linux 下的工具不称手
如果你的目标是掌握C语言,那还是用windows学起来舒心一点,linux搞这个你要面对太多跟C语言本身无关的问题,特别烦。只要你是一个好学的人,相信你不会因为工具称手就学不到东西的。linuxer们说,linux下的工具比windows难用所以会让你接触到本质,这本来就是一个诡辩。不过还有很多人提到学习程序装配过程的问题。其实我自己在学习这些的时候,我仍然用我喜欢的IDE,我只把我要了解的东西都做一遍,就什么都明白了,啊哈哈哈哈。所以说为什么我在第二段说诡辩,因为这低估了人类的能力。
如果你的目标只是学C语言,用windows还是蛮舒心的。不过你要想知道你的程序文本是怎么变成可执行代码的、几个文件之间是怎么组成程序的,你就必须要透过ide去看本质。初学者麻烦一点不是坏事,本质的东西都是麻烦的。对于初学者,他是没有能力辨别你是否设置了障碍掩盖了真相的。用vs入门的新人,几年内分不清什么是编辑器什么是编译器,不知道自己用的ide究竟是那个角色的,比比皆是。别说好学就可以自己去挖掘细节,人都是懒惰的。
如果用学车来比,linux像手动档,windows像自动档。用linux学c会对生成程序的过程更为清楚,明白自己写的一堆源文件是怎么组织起一个程序来着;用windows学的话一个运行键隐藏了很多背后的编译、链接工作。这些背后的知识对你以后编写更大的程序是十分必要的。做为一个学数学时每个公式都要推导一边才敢放心用的人,用windows学c语言让我觉得非常别扭。个人觉得:如果你是一个非信息专业的学生只是为了学习c语言完成一门课程,windows就挺好;否则有时间的话还是用linux学c语言比较好,哪怕以后你都是在windows下用c语言。职业司机怎么可以不会开手动档的车呢~
应试的话,windows下就挺好。以CS为业的话,Linux更好。原因如下:1、没QQ,其他纯娱乐的应用也少些,可以更专心;2、嵌入式、服务器领域,Linux的优势明显;3、windows99%是普通用户,linux用户多为搞开发的,接触久了,潜移默化,学到的东西是不一样的。4、linux下用qt creator之类的IDE,一点儿也不麻烦,不一定用vim,emacs。5、linux下开源比例大。哪怕只看看代码风格,注释习惯都是好的。6、gdb很好用。。7、linux下往往汉化比例低,英文要求高,短期麻烦,长期非常有好处。8、linux下被迫处理各种奇奇怪怪的麻烦事儿,短期使用很烦,长期使用有好处。9、git.其实,很多非技术因素,同样重要。总之,linux下的机会成本更低些。我linux下中文输入都没装,专门切回windows回答问题。。
先占坑。如果觉得 :wq 退出再 gcc 麻烦,开两个终端嘛。题主问的是两个问题吧:Linux 还是 Windows 学 C 好,纯手工还是 IDE 学 C 好。可能是这样吧,Windows 用命令行几乎找不到第一步,Linux 就不找 IDE 了( 反正没几个合格的)。# 关于 Vim我记得 Vim 最准确的使用情境是:给你一个主机,当你 SSH 过去之后,一定能用的编辑器至少是 Vi,这个时候你可以干活了,有闲心还可以修改下 ~/.vimrc。为什么不是 Emacs 呢:估计因为太大,我还没遇到哪个发行版装了就带的。我还用 sublime text 呢。而不是谁说 Vim 牛就一定要用,也不要试着立刻照着别人的说明把 Vim 配置成 IDE。Linux 可选 sublime text 和 gedit。# 关于 Linux会用 Linux,能节省时间啊。我上课,都得用 Linux/SSH,连 VLSI 课都是只有 UNIX 版本的工具丢在远程主机上;这个时候,你就不必像一般的群众从 ls 开始了。对着虚拟机黑乎乎的窗口傻乎乎的敲代码,算了吧…这个时候又需要点技巧让你敲代码更顺手些。虽然说几乎所有的语言都有 Windows 支持,用起来总是没有 Linux 顺手。比如为了省事改用 Python,打包成私家珍藏的脚本…Linux 虽然不是编程本身,但是你不止学会了编程,主要是你学会了脚本。courtesy to
courtesy to
# GCCGCC 那报错不是人看的(!),如果用 Clang 的话,还可以说学编程时候 IDE 和纯手工幸福感差不多。# 编程至于编程本身,有人可以纯编辑器查看修改一千行的代码,而我是用 Xcode 学 C++,因人而异吧。我初写代码时候,是照着 C++ STL 文档一条一条扒得,IDE 帮助节省很多时间。总之,苦难(比如看 GCC 报错)是不值得推崇的,用好的 IDE 也不可耻。狂热鼓吹 Linux 优越的,一定要远离。
因为足够简单啊同学。无非是敲几个命令,对智商没要求的,再笨都可以抄在小本子上记下来。你到Windows下,光学习VS怎么建个新项目什么的就折腾半天,像我这种不纠结不舒服的,十分好奇每个选项勾上不勾上都是什么意思,就更慢了。到Linux或者BSD下,无非就是编辑个文本文件,让编译器处理一下,就有结果了,你不需要记住在某个界面点某个选项,万一不小心选错了选项怎么办。你的注意力都集中在语言自身上了。
如果会学的话,可以把vim, Makefile, bash/zsh, window manager之类的一起学了只是C的话,真的没有什么特别的好处.........
白板编程。前提是你已经比较熟悉或者适应Linux了。当然Windows下面也可以。看人。
就C语言和标准库本身来说,在Linux上和Win上学习是没有任何区别的。如果你还学点POSIX系统编程的话,Linux可以教给你很多,C语言与系统的耦合带来的表达能力的提升,以及帮助你理解一些“奇怪”的设定,比如return 0啥的。Linux下没有像样的IDE,项目一大,你分析代码的时候必定会蛋疼。Geany和Code::Blocks啥的就是高级记事本和工具链的图形前端的组合。Visual Studio是最好的IDE,没有之一。但初学者上来会一头雾水,先是感叹这货怎么这么大,然后被微软的各种缩写刷屏。所以从某种意义上说,初学阶段用Linux感觉会“简单明了”一些。其他的话,被gcc的warning刷屏,被gcc的不同版本坑出翔,甚至黑暗用法触发gcc的bug (clang大法好),都是很有教育意义的……前提是你真的好好在用Linux学习C语言,而不是去搞装机美化,桌面特效,贴个二次元壁纸,终端里放Bad Apple啥的。
你能准确的区分编译器/链接器、IDE、编辑器等概念。我们学校教学用vc6(这是得有多坑),教完了之后大部分同学都不知道这些概念(你用什么编译器?vc6.0)。另外,正是因为多次的gcc、ld麻烦,所以才出现了makefile,简化了构建过程。//什么,你说vs,你用vs作buildbot啊?!
在linux下“学会”C语言没有任何优越感可言,在linux下“编程”才会有快感,多线程,多进程,ipc,信号灯,共享内存,管道,交叉编译,修改内核等等等等。windows很好,但至少对我来说绝对没有linux那么快乐。如果你只是想掌握C语言那两个对你来说基本没差,如果你是自己爱好编程。linux这种生命在于折腾的系统绝对比windows更适合你。换句简单的话来说,想获得优越感,那是白搭;想获得快乐,试试linux,免费正版开源安全自由无毒的世界等你探索。。。。。。。。。。。。。。。。题外话的分割线。。。。。。。。。。。。。。。。。。和楼上有位仁兄相反,我如果是教师的话首先就得让孩子们习惯命令行,理由很简单。由简入奢易,由奢入简难。连命令行都能接受,以后就没神马不能接受的了。打击学生信心这种事情根本不存在,做IT的童鞋都是从这条路上过来的,不会写程序的同学就是不会写程序,和用神马开发环境完全无关。给他用微软的IDE也一样,不会编程的一样还是不会编程。况且,学校那种程度,连一个make file都不用上,单文件一个gcc命令会有多难?
这个要看你将来打算做什么,如果只是单纯的想学C语言、C语法,那么在那个平台学都无所谓。如果将来打算从事 linux 相关的开发,那么最好还是要提前熟悉一些 linux 系统API,以及常用的命令、开发调试环境和工具等。至于你说的在linux下麻烦,这不是什么问题,写个Makefile就可以解决了,编译的时候敲make就自动执行编译:CC = gcc
CPPFLAGS = -Wall -g
TARGETS = hello
.PHONY:all clean
all:$(TARGETS)
#命令前是一个tab不是空格
$(RM) -rf *.o a.out $(TARGETS)
linux c接口和windows的是不太一样的。现在linux c开发比较多一点。只会windows环境的,以后工作的话可能没那么好找。另外,linux也有ide,也可以一键编译运行的。netbeans,eclipse都可以。
好处就是会让特别新的新人感觉“学一门编程语言竟然这么困难”然后放弃学习。所以我们会在线上搭IDE,让新手们专注学习语言。而不是双线作战,遇到了问题都没法确定究竟是代码抽风,还是Linux抽风

我要回帖

更多关于 linux 源代码分析 的文章

 

随机推荐