菜鸟问题,想自学C/C++开发桌面应用程序,想问的是,现在桌面应用还有用C/C++的吗?或者说是否广泛使用,是不是都是Java了? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rteta
V2EX    程序员

菜鸟问题,想自学C/C++开发桌面应用程序,想问的是,现在桌面应用还有用C/C++的吗?或者说是否广泛使用,是不是都是Java了?

  •  
  •   rteta 2013-08-09 11:22:43 +08:00 14879 次点击
    这是一个创建于 4513 天前的主题,其中的信息可能已经有所发展或是发生改变。
    还有 我卡在算法(神吗深度广度优先之类的东东)这点上卡了2天都还迷糊着,
    有大牛这段经历花了多久? 我是不是不适合搞开发?
    LZ目前 小屁公司运维(装OS,接网线,总之就打杂)想转开发。
    求指导。
    37 条回复    1970-01-01 08:00:00 +08:00
    cxe2v
        1
    cxe2v  
       2013-08-09 11:54:59 +08:00   1
    桌面应用有JAVA的么?C++比较多吧,不过现在都是混合开发了,不会用同一种语言
    rteta
        2
    rteta  
    OP
       2013-08-09 11:57:13 +08:00
    公司有个小项目 IM,我想跟着学开发,是不是应该从c/c++ 开始学?

    还有 要学算法不?
    谢谢咯
    wenLiangcan
        3
    wenLiangcan  
       2013-08-09 12:06:02 +08:00   1
    Windows 下应该 .NET 比较方便吧,.NET 可以用 C++
    funcman
        4
    funcman  
       2013-08-09 12:07:08 +08:00   1
    一般这种问题都卡住,说明你买的书不好,多买几本书对照着看。

    桌面应用的话,Windows上,如果长期跟进维护的,一般用.Net;如果是面向大众的,一般用C++。

    Java也是行业用得比较多,国内用得不多,国内主要用Java做Web应用。
    rteta
        5
    rteta  
    OP
       2013-08-09 12:43:28 +08:00
    用的是 宋剑杉 那本 Linux c 一站式入门 怎么总感觉有些地方讲的太过于简单,几句话就完了,
    另外 狂人C 这本书如何?
    rteta
        6
    rteta  
    OP
       2013-08-09 12:44:28 +08:00
    @funcman 另外,如果是打算用C/C++开发应用程序的话,,有没有必要在算法上纠结太长时间?
    jesonyang
        7
    jesonyang  
       2013-08-09 12:46:14 +08:00
    算法开源的有很多,专注于C++和跨平台的移植!
    bengol
        8
    bengol  
       2013-08-09 12:49:03 +08:00
    @rteta 为什么要买这些莫名其妙的书? 每个领域的经典书籍,随便g一下就有了
    rteta
        9
    rteta  
    OP
       2013-08-09 12:50:28 +08:00
    @jesonyang OK 如果是win 平台 是不是还要学习一种库啊? 哪种用的比较多?
    rteta
        10
    rteta  
    OP
       2013-08-09 12:51:00 +08:00
    @bengol 能不能直接推荐本 win平台 c/c++开发应用程序的书来?
    rteta
        11
    rteta  
    OP
       2013-08-09 12:52:07 +08:00
    @bengol 你是说K&R吧?
    rteta
        12
    rteta  
    OP
       2013-08-09 12:52:27 +08:00
    能不能直接推荐本 win平台 c/c++开发应用程序的书来?
    PotatoBrother
        13
    PotatoBrother  
       2013-08-09 14:05:09 +08:00 via iPhone
    Win平台的话桌面开发推荐C#
    Ricepig
        14
    Ricepig  
       2013-08-09 14:08:34 +08:00
    学学winform吧,豌豆荚开始也是基于winform

    等有感觉了,转C也容易吧
    chchwy
        15
    chchwy  
       2013-08-09 14:38:25 +08:00
    Java在大多用在Web上啦,乎人用它桌面用。

    桌面用在主流是C#/.NET,比C++好一百倍啊。
    需要跨平台的在的方案是C++/Qt。
    leavic
        16
    leavic  
       2013-08-09 14:49:39 +08:00
    C#啦,上手超快
    hanf
        17
    hanf  
       2013-08-09 17:57:09 +08:00
    windows平台桌面应用,c#是不二之选
    itfanr
        18
    itfanr  
       2013-08-09 19:39:43 +08:00   2
    C为硬件而生

    C++为算法而生

    JAVA为WEB而生 现在android的出现它也为移动端作贡献了

    C#/.NET为快速开发windows平台软件而生,包括界面

    php为web而生,且只能靠web存活。。。其他开发都是小众

    python为编脚本而生,web也可以

    go为并行而生
    rteta
        19
    rteta  
    OP
       2013-08-09 20:05:15 +08:00 via Android
    感谢大家的热心回答……不知道为何*:,我主观上非常不喜欢c sharp,
    游戏公司写网游客户端用什么语言?好像是 cpp吧
    rteta
        20
    rteta  
    OP
       2013-08-09 20:06:05 +08:00 via Android
    是cpp吗,是的话我就学c 和cpp了
    cdffh
        21
    cdffh  
       2013-08-09 22:07:07 +08:00   1
    推荐c++和qt。很好用
    rteta
        22
    rteta  
    OP
       2013-08-09 22:49:46 +08:00
    @cdffh 给推荐本书?
    jybox
        23
    jybox  
       2013-08-09 22:53:16 +08:00   1
    @PotatoBrother 你还来推荐别人呢...

    Windows的话,如果是一般的应用,.Net确实是最佳选择。
    跨平台桌面应用的话C++比较多一点,Java倒也是选择之一..
    RisingV
        24
    RisingV  
       2013-08-09 22:58:40 +08:00
    @itfanr 嗯,都同意。但除了C++ ,它是“为了让事情变得复杂,提高程序员薪水而生的”,这是Bjarne Stroustrup自己说的,哈哈
    Geeker
        25
    Geeker  
       2013-08-09 22:59:07 +08:00
    可以用Qt,但是还是推荐C#吧,上手快。
    rteta
        26
    rteta  
    OP
       2013-08-09 23:22:41 +08:00
    越看越迷糊
    funcman
        27
    funcman  
       2013-08-09 23:45:02 +08:00   1
    @rteta 写桌面不太需要算法。排序算法学一学即可,图的算法都很少用到。做这个几乎不需要你设计算法,用已有的即可,会编程实现就行。
    rteta
        28
    rteta  
    OP
       2013-08-09 23:46:14 +08:00
    @funcman thanks
    funcman
        29
    funcman  
       2013-08-10 01:09:26 +08:00   2
    C++还是.Net,要看做什么。

    .Net做项目,考虑到XP用户没有装.Net Framework,需要把.Net Framework打包进安装程序。安装包会比较大,并且安装速度稍慢。这样,用户体验就要差一些。所以很多流行的免费软件不用.Net

    .Net经常被说成COM的升级版。用COM的软件,发布起来就有点麻烦了。需要做一下DLL注册。而国内用户经常喜欢可以“绿化”的软件,直接拷来就用,连安装都不要了。

    C++做的桌面应用,就没这些麻烦。把所有依赖的DLL都放到EXE目录下,就能跑,不需要装重量级的库。(如果用到COM接口的库,还是需要注册一下)

    开发游戏,主要用C/C++,和诸如Lua、Python这样的脚本语言。但是游戏开发需要写很多编辑器供策划和美术使用,编辑器使用的技术也就是桌面应用开发的技术。目前这块,.Net和Qt是最流行的;MFC也有使用,但它实在不适合快速开发,用得极少;另外也有使用C++Builder的,只不过C++Builder被宝兰卖给小厂了,没多少影响力,但是用它开发编辑器还是蛮舒服的。

    .Net在编辑器开发上的主要问题是,.Net有自己的内存模型,和C++的模型不太一样,调试时容易被坑。游戏引擎肯定是本地代码的,编辑器肯定需要调用引擎代码。实现起来倒不难,不需要把引擎包成.Net的DLL,直接用.Net的C++/CLI来写

    游戏引擎肯定是本地代码的,编辑器要调用游戏引擎,游戏引擎一般以dll的形式为引擎提供功能。如果用C#来做,需要把引擎的dll用C++/CLI包装成托管dll。但其实直接用C++/CLI来写编辑器就挺好的,没必要用C#。参考资料看C#的就可以了,反正都是调用.Net Framework的库,语法上有些不同。不过托管代码和本地代码的内存模型不同,调试起来会遇到坑。
    funcman
        30
    funcman  
       2013-08-10 01:36:20 +08:00   1
    C#相对于C/C++的优势在于,C#有垃圾回收。

    垃圾回收的好处,不在于可以使经常忘记free内存的菜鸟也能写代码。

    一个复杂的系统,对象会在很多个作用域中被引用。作用域与作用域之间,如果还要交换对象的引起情况,那系统模块间的耦合就太大了。简单的系统应该是,我在这个作用域中引用了一个对象,不需要关心这个对象是否在其它作用域被引用。既然不关心,那么也没办法靠判断来决定是否释放对象。对象什么时候释放,应该由一个底层的机制来解决。如果没有这种机制,再小心的老手,也写不出没有内存资源泄露的程序。

    C/C++编写系统,一般靠引用计数来管理对象何时才能消亡。如果不用引用计数,那只能统一生产对象再统一释放,内存够倒还好。C/C++其实也有一些垃圾回收(gc)工具库,不过应用得不广泛。gc能回收的内存,必须是gc提供的内存分配功能获取的内存。但是C/C++有自己的malloc/free,可能会出现free掉gc管理的内存的情况。C++标准其实想加入gc,但是手动管理的存在,一直不太好加。

    大多数时候,引用计数够用了,gc毕竟太复杂。底层的东西,太复杂不大好。微软以前长久地被dll地狱问题困扰,到.Net Framework的推出时才得以解决。而Linux、OSX这些系统,只不过简单的约定了一下版本号,就解决了这个问题。微软在.Net Framework上花了巨大的精力,结果现在还是有很多人不用它。
    iveney
        31
    iveney  
       2013-08-10 03:56:35 +08:00
    @funcman C++ 已经在提倡使用 shared_ptr, unique_ptr 来管理对象,而不是手工管理指针了。

    好奇现在是不是 Windows app 都全用 .NET/C# 了。很久之前自学 Windows App Dev 时还是用的 Win32 API 与 MFC/C++。
    rteta
        32
    rteta  
    OP
       2013-08-10 09:21:41 +08:00
    好吧 我知道了 谢谢大家热心回答 !
    funcman
        33
    funcman  
       2013-08-10 10:13:01 +08:00
    @iveney shared_ptr毕竟是C++11才加入的,如果用老一点的编译器,你还得用boost。shared_ptr出现之前,引用计数就大量使用了。

    WinForms的开发,比Win32/MFC要容易多了,易用程度跟VB差不多。
    miller
        34
    miller  
       2013-08-10 10:55:43 +08:00   3
    毕业以后在一家互联网公司做了两年的windows桌面客户端软件开发。
    我们这边客户端,大都使用C++开发。
    就我们项目组来说,用了boost的很多功能,比如boost.smart_ptr管理内存,boost.test单元测试,boost.thread写多线程等等。界面库也是自己开发的。
    stackpop
        35
    stackpop  
       2013-08-10 12:18:19 +08:00   1
    如果纯粹是桌面开发的话,windows下多数还是C++、C#开发,MFC性能比较好, winform和wpf之类的让界面开发变得非常简单。当然,你也可以学习QT。

    其实业务逻辑才是难点,界面是很简单的。算法这种东西最好还是要有基础的知识储备再看,各种数据结构要理解。

    理解DFS要先理解递归,树(解答树)和图这种基础的数据结构。BFS类似。

    另外这两种算法有固定的模式,难点通常在于如何构建解答树、状态的保存、判重等。
    yangxin0
        36
    yangxin0  
       2013-08-11 09:12:15 +08:00
    @cdffh 你现在用QT么?
    cdffh
        37
    cdffh  
       2013-08-11 17:20:26 +08:00   1
    @yangxin0 之前用过一段时间,感觉还不错,现在用的不多了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     969 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 19:23 PVG 03:23 LAX 11:23 JFK 14:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86