V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rteta
V2EX  ›  程序员

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

  •  
  •   rteta · 2013-08-09 11:22:43 +08:00 · 14173 次点击
    这是一个创建于 3918 天前的主题,其中的信息可能已经有所发展或是发生改变。
    还有 我卡在算法(神吗深度广度优先之类的东东)这点上卡了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   ·   我们的愿景   ·   实用小工具   ·   2421 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:56 · PVG 22:56 · LAX 07:56 · JFK 10:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.