这是怎么了为什么手机一直是开机画面这个画面

1000赞更新:&br&被一群聚聚的答案顶到了后面,这里简要引用一下:&br&&br&&a data-hash=&762e446563bcd0a13f5d16f69eeee211& href=&///people/762e446563bcd0a13f5d16f69eeee211& class=&member_mention& data-editable=&true& data-title=&@装配脑袋& data-hovercard=&p$b$762e446563bcd0a13f5d16f69eeee211&&@装配脑袋&/a&聚聚写明了如何用VS使用clang作为编译器,以支持C99特性&br&&a href=&/question//answer/& class=&internal&&毫无编程基础的小白准备学习C语言,用VC6还是VS2015? - 装配脑袋的回答&/a&&br&&br&&a data-hash=&b6d28ac2b88b7f230552bab4a0aceaca& href=&///people/b6d28ac2b88b7f230552bab4a0aceaca& class=&member_mention& data-editable=&true& data-title=&@Belleve& data-hovercard=&p$b$b6d28ac2b88b7f230552bab4a0aceaca&&@Belleve&/a&聚聚写明了如何使用tdm-gcc和VSCode在Windows环境下编辑编译并调试程序&br&&a href=&/question//answer/& class=&internal&&毫无编程基础的小白准备学习C语言,用VC6还是VS2015? - Belleve 的回答&/a&&br&&br&大家一起把各种工具链IDE的配置和使用教程都凑齐了,这样才新手友好&br&&b&忘了说了照下面的步骤装完VS,占用空间大约12G,C盘空间不够的慎重考虑&/b&&br&&br&正文:&br&&br&首先,到这里下载VS2015&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Visual Studio&i class=&icon-external&&&/i&&/a&&br&&img src=&/098ca2dc0a407353ccff3_b.png& data-rawwidth=&1233& data-rawheight=&709& class=&origin_image zh-lightbox-thumb& width=&1233& data-original=&/098ca2dc0a407353ccff3_r.png&&安装的时候,记得&b&不要用默认安装&/b&&br&&b&把这个点上,其他的都不要&/b&&br&&b&&img src=&/53c071dbef_b.png& data-rawwidth=&467& data-rawheight=&656& class=&origin_image zh-lightbox-thumb& width=&467& data-original=&/53c071dbef_r.png&&只要那个红圈的东西,其他的不勾&/b&&br&装好了打开&br&&img src=&/b28cf6711_b.png& data-rawwidth=&1688& data-rawheight=&1026& class=&origin_image zh-lightbox-thumb& width=&1688& data-original=&/b28cf6711_r.png&&注意左边那个解决方案管理器,你每一个程序的代码文件都会出现在这里,只有出现在这里的文件才会被编译,如果不小心关掉了可以在上面的视图菜单里打开&br&&br&新建工程:&br&文件-新建-项目&br&&img src=&/c954bd7aad4027cfe00ea_b.png& data-rawwidth=&645& data-rawheight=&228& class=&origin_image zh-lightbox-thumb& width=&645& data-original=&/c954bd7aad4027cfe00ea_r.png&&&img src=&/70a8fec6b78fc515c5aca8_b.png& data-rawwidth=&943& data-rawheight=&653& class=&origin_image zh-lightbox-thumb& width=&943& data-original=&/70a8fec6b78fc515c5aca8_r.png&&注意那个名称,是你的工程的名称,不是代码文件的名称,所以不用加.c&br&弹出窗口点下一步&br&&img src=&/b1dd66ab87b794e5497ed7_b.png& data-rawwidth=&675& data-rawheight=&580& class=&origin_image zh-lightbox-thumb& width=&675& data-original=&/b1dd66ab87b794e5497ed7_r.png&&空项目勾上,SDL关掉,小白不需要知道scanf_s怎么用,让warning留着&br&完成之后,解决方案管理器有东西了&br&&img src=&/cafd5a73bda040_b.png& data-rawwidth=&247& data-rawheight=&484& class=&content_image& width=&247&&源文件那里,右键-添加-新建项&br&&img src=&/3d_b.png& data-rawwidth=&756& data-rawheight=&222& class=&origin_image zh-lightbox-thumb& width=&756& data-original=&/3d_r.png&&&img src=&/a8d447ea02_b.png& data-rawwidth=&947& data-rawheight=&658& class=&origin_image zh-lightbox-thumb& width=&947& data-original=&/a8d447ea02_r.png&&注意一定要把后缀名改成.c,不要用cpp后缀&br&添加完成后就能正常写代码了&br&&img src=&/8ec1d4ca4189_b.png& data-rawwidth=&641& data-rawheight=&260& class=&origin_image zh-lightbox-thumb& width=&641& data-original=&/8ec1d4ca4189_r.png&&生成就是编译,f7编译整个工程&br&&img src=&/e6f5a143e_b.png& data-rawwidth=&296& data-rawheight=&291& class=&content_image& width=&296&&调试就是调试&br&&img src=&/97a2df8929e0ecc5b09eaff8ea254f5a_b.png& data-rawwidth=&379& data-rawheight=&416& class=&content_image& width=&379&&
1000赞更新: 被一群聚聚的答案顶到了后面,这里简要引用一下: 聚聚写明了如何用VS使用clang作为编译器,以支持C99特性
聚聚写明了如何使用tdm-gcc和VSCode在Windo…
更新:擦,本来只有一句话,推荐Qt,远离微软,有人追问,补充了点,有人又追问,又补充了点,然后出了趟门回来,感觉跟捅了马蜂窝一样。既然都说到微软了,那就接着展开一下。&br&&br&&b&问题的本源&/b&&br&&br&微软就是战线太长了,忙着去主导各种标准,制订各种框架,这样的话,才能更好的夹带私货,用一个你必须用的东西推进另外一个他想让你用的东西,诸如dx和windows,诸如c#和 &a href=&///?target=http%3A//asp.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&asp.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,而又因为主导了开发者,才能进一步主导用户,而主导了用户,大量的利润便会随之到来。在整个链条中,如果消费者没得选择,开发者也没得选择时,微软就能想卖啥就卖啥,完全基业长青了。出个新东西没关系,不符合我的利益我就不支持。如果新东西很有前途,那我自己搞一套,然后再把我的开发者和用户绑架过去。&br&&br&到底哪一个方向会有前途呢?微软自己也说不清。到底哪个领域对今后的软件生态影响比较大呢?微软自己也道不明。只能朝着各种有苗头的地方去努力,以前技术领域比较窄,微软可以囊括整条产业链,编译器/IDE/框架,开发者基本可以躲在微软的圈子里不出来。后面各个技术领域蓬勃发展,分支越来越多,微软就有些力不从心了。但是战略依旧没变,任然试图去主导任何一个技术领域的标准。利用自己的影响力去忽悠各种开发者:“跟我来吧,有美好的明天”,但技术领域每天都在推陈出新,产生新的细分。为了主导更多的新领域,称霸完一个领域后,微软的重心并不是完善该领域,而是继续集中精力称霸其他新的领域。&br&&br&对于支持期的技术,微软会利用自己强大的影响力进行各种捆版整合,告诉你:“新的革命又到来了,你准备好了么?”,告诉你:“用了它之后,你就什么都不愁了”,“XXX即将停止支持”,然后各种社区中,一堆mvp前扑后拥的进行推广:“XXX大法好,MS法力无边”;书店的柜台上,瞬间多出几十本红色封面黑色封面的宝典;CSDN的主页里,各种微软 TechED, 夏令营。很多人一看,我靠,全世界都在用,我再不用是不是就要被淘汰了呀?&br&&br&完成支持后,微软进入绑架期,为了不让你用其他的东西,微软想尽一切你的需求,然后为满足你可能的一切需求,开始拼命的飙版本,来兼容各种各样的东西。很多人觉得这个东西好像挺强的,什么都能做,不用学其他了,微软就笑开花了,觉得可以绑架大家了,于是开始疯狂的用该技术夹带越来越多的私货,或者是新技术,或者是为了强迫其他人用另一个东西,为了兼容这些私货,继续飙版本,这就叫绑架。&br&&br&等到你积累了越来越多的代码,或者成熟框架后,你突然发现,原来你能做的事情,就是只能在微软给你划定的一亩三分地里面不断的耕耘。想用它开发一个微软商业上不支持的东西?没门。依赖微软越久,做出选择的成本越来越高。这时会有两种结局,第一种,微软给你指出下一个革命的方向,你别无选择,斩断原有积累投入到下一个革命中。异或,微软觉得自己在这个领域江山稳固了,竞争对手都没了,不会再出什么幺蛾子了,于是彻底开始不思进取,你用着过时的技术干着急。&br&&br&曾任微软副总裁的李开复回忆:“一个产品队伍一旦失去了假想敌,就会松懈,盖茨和鲍尔默也会撤回对它的投资和支持。比如说,微软IE击败网景之后,微软就降低了投资,致使它的浏览器多年没有再进步,直到又出现了‘火狐’这个敌人,才又开始振作。”火狐就是网景的“遗孤”。&br&&br&&b&微软的绑架&/b&&br&&br&MFC就是一个很好的例子,当年同 VCL竞争时挺上进的,VCL一死,MFC也跟着死了,现代的界面系统都是 windowless直接绘制控件了,笨重的mfc还在基于系统控件。大量的onpaint自己做,人招不到不说,工作效率奇低,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高,你说我会选啥?mfc还需要各种奇巧淫技才能达到 qt的效果,弄那些技巧的人变动,项目就傻逼了,考虑到这一点,你说我又会选啥?最近两年界面开发又开始脚本化了,你会发现 Qt有各种支持脚本(除了内嵌支持 js的 QtScript外,还有 Python的 PyQt,还有 Lua)任你选择。核心代码C++,逻辑界面python,用过脚本开发UI的人都不会想用回C++写UI,因为界面逻辑脚本化可以提高至少两倍以上的生产力。微软的策略呢?想用脚本?没门,因为我不推脚本但是我推c#,所以你想方便的写高级界面?还是跟着我去弄 .net和wpf去吧,这就叫绑架。面对绑架你别无选择,开发者微软系的代码和经验积累越多,想离选择非微软的东西成本就越高,想不被微软绑架的代价就越大。&br&&br&为啥有人愿意给 Qt脚本化而不愿意给微软的界面系统脚本化呢?并不是微软的技术就比不过Qt,而是大家唾弃微软的臭脾气,外加Qt是开源的,为它实现脚本各种方便。这里并不是说开源的东西就一定比微软的东西好,微软有很多领先的技术甩开源几条街,主要问题在于微软的封闭性。所以我的论点并不是一定要用开源,而是建议大家有选择的余地下,选择非微软技术,比如qt, flash这种。&br&&br&&b&死也要主导行业标准&/b&&br&&br&为了引导行业标准,微软很多设计的很好的东西,各种音视频格式,还有最近的 HD Photo图片格式,比 jpg2000 和google的webp好多了。但是很多人由于微软的封闭不买微软的帐,很多框架和软件都直接支持webp了,也没几个人支持wdp,在这种情况下,我宁肯选择次一等级的 webp。&br&&br&微软的出过很多标准性的东西,比如wmv, wma格式,当年挺先进的,微软也天天忽悠人去用这两个格式,但是由于封闭,最终失去支持,大家选择了更加开放的方案来代替,微软也就不思进取了,最终视频领域 现在是 h.264/265,音频领域是 he-aac v2。&br&&br&微软又试图代替 pdf,引领该领域的标准,然后自己出了一个 xps。论技术,确实高于 pdf很多,但是没人用呀,没软件支持呀,连打印机都只支持扫描成pdf格式。所以我选择 pdf并不是因为 pdf技术比微软强,而是因为它不是微软的。而且我估计个两年出个 pdf2,xps也就跟 wmv一样进棺材了。&br&&br&再比如 SilverLight,微软在没有太大把握的情况下硬推这个东西,就是因为怕c#由于满足不了RIA使得C#开发的开发者流失到微软以外去,为此 .Net还逼迫大家升了几个版本。可惜,大家都知道的,于是微软自己对它的支持都少了很多。&br&&br&你说微软技术弱么?不弱。那为啥这些明显乱七八糟的东西微软都要硬撑着试图主导行业标准但是最终又主导不了呢?那是因为我们先前提到的微软战略,从几十年前到现在都从来没有变过,然而时代变了。&br&&br&&b&Win32 API&/b&&br&&br&Win32 是系统层最稳定的接口,一切功能的基础。这么基础的东西,微软该化大力气持续发展对不对嘛?非也,随便举两个例子你就会发现其实它已经落后世界很多了。微软是任性的,觉得我提供的开发模型可以解决一切问题,为什么要参考其他操作系统改进呢?即便其他操作系统提供的功能很好,我也要给你挑挑刺。而按照微软一贯的规律,系统 API领域,我完全控制了,那么我改进的动力也就不那么强了,庶民们岂能妄自议论 Win32 API,更别说想提交改动 patch给我了。&br&&br&线程同步:如果你写线程同步,你会发现 Win32 API缺很多关键的东西比如:条件变量,读写锁,这两个最基本的能够组合成其他任何同步模型的东西,微软直到 Vista的年代才提供支持(msdn Condition Variable),这就意味着,你如果用了,你将面临很难在 xp下跑的情况。你问微软 xp怎么办,微软说用 event去 wait嘛。你就奇怪了,event这么弱智的东西能代替条件变量么,为啥不再xp年代就支持了?&br&&br&单次初始化:pthread_once,没错,windows下面由于缺少这个东西,你再做一个全局变量供你的接口访问时,你需要保证该变量只被初始化一次。即便多线程同时调用访问该变量的接口,也不会出现两次初始化的情况,pthread_once就是做这个事情的。直接把代码写成:if (inited == false) { init(); inited =} 线程又不安全,外面加一个 CriticalSection,那你又需要在更前面去 Init这个 CriticalSection,还要保证不会发生多次 Init,问题还是没解决。于是很多人在 Windows下的解决方案是,在全局变量声明一个类的静态实例,这样 main()之前,那个类的构造函数能够提前被调用,进而又引入了新的问题,及多个全局实例又会存在谁先谁后被构造的问题,你又得用恶心的 #pragma宏来解决,最后初始化代码一团乱麻。而如果微软提供 pthread_once类似方法,那或许这一切都会变的很清爽。&br&&br&网络接口:用过 winsock接口的人都觉得简陋,你想实现高性能的网络服务,需要控制 TCP的大量细节参数,比如 TCP_NOPUSH, TCP_CORK, 还有 QUICKACK这些控制调整 TCP面向流量优化或者面向流速进行化的基本功能,winsock上看都看不到。更别说 Google的 TCP速率优化(Kernel 3.2.12收录的 Google patch)等现代功能了。即便是对比最基本最传统的 posix套接字,winsock的行为也是错乱的,比如 REUSEADDR,再比如 Win32下你监听一个 UDP端口,给远端发送 UDP数据包,如果远端没有监听该UDP端口,那么你服务端收到 icmp: port unreachable后,那个udp socket就彻底被 reset了,后续什么数据都读不进来,持续给你报 10054,搞笑吧。除非你创建udp套接字时做一大堆 *windows独有的* 专门的设置,否则vista之前,你都会被 10054。vista之前,默认情况下,客户端如果拒绝收服务端的 udp包的话,服务端的 udp套接字就用不了了,这是不是在搞笑么?还有各种基础功能限制,比如:缺乏poll支持(强迫你用iocp代替),select最多64个fd,没有 socketpair。当然,没有这些也可以写网络应用,但写惯 unix下的网络代码突然来 win下写,就会觉得这真是个玩具呀。&br&&br&TLS:TLS有数量限制也不管了,但是线程本地存储这个东西是需要 destructor的,即我创建了一个本地存储来存一个对象,我可以设置一个 destructor函数指针,在线程退出时,这个函数会被自动调用到。比如你想实现一个 per-thread cache(比如类jemalloc的 arena),线程退出时能够被自动析构,这个最基本操作在 Win下却可以把你别扭死,原生TLS API没有这个支持,你又不想所有线程退出都要强迫使用者调用一下 destructor,那么你开一个线程监听所有线程?还是怎么招?看看 boost和 jemalloc这些在 win下的 destructor实现,你就会发现恶心的要死,就像要在一块工整的电路板上,焊接一根非常碍眼的飞线一样。&br&&br&GDI/GDI+: GDI是牛逼的,出生早又承当了 GUI的基础工作,毕竟那么多年了,做成这样是无可厚非的。但是XP年代的 GDI+一出生就落后于时代。比同期的同一个级别的开源项目 Cairo(gtk后端,wine用来模拟gdi/gdi+的后端,webkit/mono后端)和 Quartz(OS X图形后端)来,GDI+除了速度卡外,图像质量差,功能简陋,不支持抗锯齿,对GDI的字体效果也并没有质的改进。所以 Windows下的应用软件,一直因为字体和图像质量受到诟病。直到后面的 Direct2D出来希望改进这个局面,也已经是好多年以后的事情了。大量兼容 xp的程序还在跑在 GDI/GDI+上。&br&&br&( 问题有很多,以下省略若干字)&br&&br&按微软的能力,想改进这些基础接口,应该不是难事。但基础接口的长期滞后,折射出的是该公司全胜时期的傲慢。&br&&br&&b&统治与分治&/b&&br&&br&微软的接口设计向来是缺乏美感的,喜欢复杂化,喜欢什么东西都搅合在一起。什么叫做大一统?就是什么都能做,貌似很强大,一个东西能做的事情很多,开始是好的,但是随着时间的推移,耦合度高,各种盘根错节,一旦其中一个设计很 “巧妙”的东西过时了,那所有依赖它的东西将面临死亡。什么叫做分治?就是保证简单性和可拆分性,每个系统专心做好一件事情。一个不行,换掉即可,整个解决方案是由若干全部可以替换的子模块组成的,这叫分治。&br&&br&Windows技术栈就是一个典型的大一统设计,他有很多很巧妙,依赖性很强的东西。比如,“一切都是窗口”,这个思想,从设计上来说就是有问题的。举个简单例子,WSAAsynSelect 用过的人都知道,这是一个网络接口,用来判断哪个套接字上有事件。但是却又要传一个窗口句柄过去,让窗口来接受网络事件,这就是一个很搞笑的例子。微软为什么这么设计呢?因为应用程序本身有一个消息循环了,就是窗口消息循环,但是如果处理网络的应用程序使用类似 unix poll的方法,去等待消息的话,窗口消息就得不到处理了。如果把poll放到一个线程里的话,那UI线程要找网络线程做点事情,那网络线程在 poll的等待周期中,如果没有新的网络数据过来,可能短时间内没办法理会 UI线程的请求。于是微软的解决方案,就是让网络层的事件合并到 UI的窗口事件中,这样就比较方便了,全部在窗口消息队列,你要把UI和网络放到一个线程也可以,两个线程也罢。这样把两个风马牛不相及的事情搅在了一起的:“巧妙” 设计在微软的技术栈里数不胜数。&br&&br&合理的处理方法应该是啥?应该是继续使用 Poll,每次 poll可以设一个比较短的时间,并且可以被外面线程唤醒,这样就不会出现之前的问题了,两件事情不会搅在一起,这就叫可拆分性。结果呢,不关网络,大量的其他东西都和窗口搅起来了,等到 Windows程序要移植的时候,就会变得万分痛苦。有人说不是有 IOCP么?看看有多少一流的服务器支持 iocp?再说java可以把所有不同操作系统的异步事件模型封装成NIO,对 Windows对的 iocp却提供单独的接口,而且直到 7.0以后才有,微软总喜欢和全人类反着来。&br&&br&缺乏审美的设计,才会导致 Win32 API被 GUI所束缚这样一种结果。这在其他系统对比来说,这时听都没听过的事情。这是设计上的偶合,还有商业上利益的选择。比如网页开发,C# 和 &a href=&///?target=http%3A//asp.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&asp.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&绑定太紧,&a href=&///?target=http%3A//asp.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&asp.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&和 iis绑定太紧,iis和 windows又绑定太紧。微软的东西才出来都是先进的,可封闭的微软不愿意同外面合作。你要用我先进的东西,你就一个系列都要用。最终全部都搅在一起了,风险是相当大的,系统就像一个吞噬了各种化学物的怪兽一般,蹒跚前行。&br&&br&而所谓简单性和可拆分性的东西,是四处皆可替换的东西。比如你做 web开发,你选一门语言,python,语言就做好语言的事情。外部的网络框架,可以用 django,flask, web.py等等,接口可以用 fastcg / cgi / wsgi / uwsgi / apache_mod, 而外部的服务器,可以用 apache, nginx, lighthttpd。清晰的被分成:语言层、框架层、协议层、服务层 四个不同的层次,每个层次若干备选方案,互相兼容,web.py过时了,我换 flask,apache过时了,我换nginx。每个产品都专注做好自己的事情,并前后适配其他层次的方案,python出问题了,我换 ruby,换php,协议任然用 apache_mod或者 fastcgi。这就是分治,具备美感的设计。&br&&br&这样的情况在微软的技术体系里很难出现,这些技术运行到windows下水土不服不说,微软自己就不让你选:你要写asp .net,那语言你就用 c#(vb比较小众),用了&a href=&///?target=http%3A//asp.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&asp.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&你就要用iis,而iis只能跑在 windows下。外部的人很难兼容进来,本来微软就不太愿意支持其他技术。那么好,一开始可能领先,但是随着时间推移,这么长的链条中间一环出问题,可能会导致其他的跟着他一起被人抛弃。&br&&br&微软一方面出于商业考虑,生怕自己技术链中哪个环节被人替换,一方面有些接口设计充满耦合,考虑不周,导致后面大量的主动升级和被动升级,什么 ocx, com, atl, ole,dx1-7类似的东西都可以搞出那么多来折腾人,系统内核 GUI,网络、多媒体,大量的 API偶合在一起。最终简单的一个 Office和 Windows一样臃肿丑陋,这就叫缺乏美感的设计。&br&&br&&b&C#&/b&&br&&br&C#是一门简洁优雅的好语言,是微软中比较少见有品味的设计,这是因为 C#之父 Anders就是来源于微软之外的 Borland。Anders 早年为 Borland 设计的 Turbo Pascal 和 Delphi 就以编译速度快,使用简单和功能强大受到大众的喜爱,所以在设计 C# 时融入了很多早年的审美观。C#语言层面上胜过 java不少。我经常边用边骂 java到9到10了,也没想着好好的学学 C# 的一些特性。Java 这么多年连个 get/set 都不抄一下,连个unsigned都不肯给我用用。用 C#写代码比 java流畅不少,但应用范围太窄呀,我没办法还得接着用 java呀,应用范围广呀。我用 java写的程序随便运行在几乎任何平台上,大量最新的开源成果可以直接应用。可怜的C#却被微软画了一个圈,死死的呆在圈里出不来。其实大家都是欢迎 C#的,不然也不会有 mono这个项目了,但 mono运行效率比 jvm低不少,比原生的 .Net运行时低很多,库也不全,实在难以承当大任。&br&&br&除了部分人专门从事 C#的工作外,现在互联网企业,几乎很难看得到 C#的身影:做移动应用,用原生的 java和 objc。做服务端用 C++/java/各种动态脚本,做页面用 Js 页游用 Flash。做PC游戏用C++/脚本,没C#什么事情。移动游戏主要也在使用 C++/脚本(unity只是众多游戏开发引擎中一个单例未来是否被代替未知,XNA就是个玩具)。唯一只有微软的老本行PC桌面应用,没错,是C#,但是现在也面临诸多挑战: CEF(Chromium Embedded Framework)用js直接写Windows本地应用,如网易云音乐用CEF效果拔群;Qt系列+脚本(越来越多互联网公司在用,如Wps);自己C++UI库/脚本(例子太多了)。这些方案你或多或少都能挑出些问题来,但不可否认的是她们正从各个方向蚕食 C#的传统地盘。你可能说C#在客户端能做很多非 UI的事情(比数据库和网络还有图像),但 CEF/Qt 这些播放点流媒体、访问下网络、弄下图像或者请求下数据库同样很简单。现在 GUI开发的脚本化进程正在席卷各种桌面开发方案, js等脚本运行速度越来越快,C#速度上并不能体现出数量级的优势,而且基于泛型的脚本语言开发效率比原来高很多,同时这些解决方案全是跨平台的。而整个进程中 C# 被排除在外了,这才是 C#真正危机的地方。&br&&br&&b&DirectX&/b&&br&&br&有人奇怪我为何喜欢 OpenGL,话说白了只有一个理由,它是开放的而且它不是微软的。如今很多人会说你看 d3d 接口不错,兼容性高,CPU占用低而且画面好。没错,但记心好点的同志们把时间拉长一点,Win95时代微软强推 DirectX而封锁 OpenGL很多系统调用的事情各位还记得到吧?那各位还记得到 DX才出来时烂成什么样子么?当时业内骂声一片,很多人看了眼接口就扔了,直到 DX5出来的时候,你稍不留神,还会把整个屏幕画花了,或者弄死机了。当年 OpenGL领先 DX不是一个量级。直到 DX8出来了,才算完善了一些。微软为了商业利益,把整个行业拖后了数年之久。直到2006年,很多 3A大作还是以 OpenGL为图形底层,不鸟微软的 D3D。&br&&br&微软的技术架构,向来不太优雅,耦合度又高。Dx7以前,DirectDraw的表面和 D3D设备还有纹理搅在一起,DSound的坐标系统又可以和 D3D的坐标系统搅在一起。大量的数据结构被定义出来,一个矢量一个矩阵还要单独定义一下,不准我跨平台库用自己的定义么?你就不能用个数组么?你强大是强大,但是你耦合度实在太高了。一个环节更新,所有环节被迫更新,然后就飙版本的原因之一。DirectX的设计就是没有品味的,如果按照简单性和可拆分性的思路来重新考虑,Dx软件包中,应该隔的比较开才行,能不定义的对象和结构体,尽量不定义,用C原始的类型或者数组来接口,这样不会妨碍我外面灵活使用。然后游戏开发者靠一门胶水语言把这些独立模块根据需要粘合在一起,这样的方式是不是更清爽一些呀?&br&&br&开放的东西能自我适应性,自我修正。Real Networks估计很多人还没忘记,当年的他开发的 RM / RMVB视频格式,因为压缩比高,同信噪比下码率能有更低的码率,画面质量更好,而赢得了广泛的支持。但是 RM / RMVB却是一个封闭的视频格式,虽然领先了业界数年之久,但是数年后即被开放的 H264所代替,H264虽然一开始接受度不高,但是数以万计的人在帮他完善。学院派今天发研究出一种更有效的宏块搜索方式,不出两个月工程界就跟进了。今天有人发现一个运动估计的改进,明天有人实现个更低延迟的缓存管理,或者提升下错误恢复能力。免费的 x264不论从延迟,性能,画质,码率都直接秒杀很多商业公司的编码器,ffmpeg又可以轻易的播放h.264视频。最终 Real Networks抱着它的 rm/rmvb一起进了坟墓,死前还不忘叫一句它正在开发 rmvb2,超越 h.265标准的编码格式,业内嗤之以鼻。视频领域的玩法已经变了,H.264通过不断发展,最终颠覆了RMVB的商业模式,这就是一项技术自我适应,自我修正的例子。&br&&br&今天的 D3D就像当年的 RMVB,就算他用商业手段狠狠恶心了 OpenGL一把,导致后面 OGL数年发展不顺,但是老话说得好:理胜力为常,力胜理为变;一时之强弱在力,千古之胜负在理。随着 OpenGL新标准的不断完善,虽然暂时不能彻底抛弃 DX,但封闭的 Dx必然会随着微软 Windows 逐渐边缘化,这就叫得道多助失道寡助。&br&&br&&b&全世界玩一套,微软自己玩一套&/b&&br&&br&还是因为微软最初的战略没有改变,导致全世界一套,微软自己玩一套;微软看不起开源界,开源界也不理微软。再次强调,并不是只有开源才好,而是这么多家公司里,只有微软一家试图自己从头到尾建立一套完整的技术体系,只有微软一家采取如此封闭的策略。然而早年微软可以罩住整条产业链,并且活的很爽,但是现在大量基于开源界的最新成果都和微软技术栈水土不服。&br&&br&所以开发者会面临:依赖微软和不依赖微软两种选择。依赖微软,很容易和外界形成隔离。而不依赖微软,你得到的是满天下的选择。前者强调高度集成统一,后者强调可拆分替换。然而,世界潮流,浩浩荡荡,顺之者昌逆之者亡。&br&&br&&b&成也萧何,败也萧何&/b&&br&&br&早年的微软,象一个潜伏在丛林里的猎手,利用自己操作系统的优势地位,寻找着产业链最高端的用户需求。一旦一项技术可以满足用户某种根本需要,微软就不惜牺牲眼前的现金流,来换取未来的行业领导地位和盈利。或快速收购,或恶意打压,或自家出一套,任何一个领域只要有新的东西出现,微软就试图去控制它,并绑架获出钱养活接受了微软标准的软件开发商让他们支持,出钱扶持低端的开发者让他们学习微软标准,于是巨大的利润,随之而来。&br&&br&这样的战略,使微软茁壮成长,并成为接二连三的行业标准拥有者。然而这样的战略有一个致命的BUG,就是标准必须是与时俱进的,微软需要不断调整已有标准,否则越来越多的标准就会成为束缚住微软的一条条绳索,越来越多的兼容性问题象一座座大山一样压得微软喘不过气来。掌握的标准越多,微软越难改变,随着时间的推移,将会被微软体系外更加迎合用户偏好的竞争者们所取代。&br&&br&有人说:“微软错过了移动化浪潮,错过了云计算,是因为鲍尔默的误判。智者千虑必有一失,再牛逼的人也有判断失误的地方”。但是通过上面的分析,我们可以看出这种说法的荒谬性,我们需要清醒的指出,就算没有鲍尔默,微软即便赶上了云计算,他也会错过雾计算;他即便赶上了雾计算,他照样会错过烟计算。&br&&br&这样的战略,使微软早年站到了时代的风口浪尖,又使如今的微软,变得越来越与时代背道而驰,不是微软不想融合,而是融合的成本越来越高。世异则事异,事异则备变,理解了微软的核心战略,就不难理解微软为什么会去弄什么 xps, silverlight;理解了微软的战略,就能理解为何微软的精力总是在制定新标准,而不是改进老标准了;理解了微软战略,就不难理解为何进入2000年以后,微软总是昏招迭出了。&br&&br&病在肌肤,还可以医治,病在肺腑,人就危险了。沿袭了那么多年的战略,成就了微软和他的下游开发商,也害了微软,让微软想改变都改变不了。就像一辆陆地上上装甲车,装甲越厚越坚固,然而现在要到水里开战了,所有装甲一夜之间全成了负担,要寻求救赎,除非把自己从头到尾全拆了才行。进入2009年后,看到当年一致支持自己标准的下游开发商们,粉粉判离微软转投敌营时,微软深刻的意识到,老天已经再也不像原来一样眷顾微软了,这真可谓是:成也萧何,败也萧何!&br&&br&&b&微软的选择&/b&&br&&br&人什么时候会感觉到压力?就是拥有一个东西,但是看着这个东西一天天的减少,越努力抓住他,却又越抓流失的越快,改变意味着放弃,等待意味着死亡。在这样的压力下,微软昏招迭出,这并不能怪微软高管愚昧,也不能说微软运气差,而是自从步入 2000年以后,沿袭了几十年的一家统治世界的战略与时代变得格格不如了。早年的成功让微软无视各种问题,继续靠惯性又活了15年,错过了自我救赎的最佳时机。&br&&br&核心战略出问题,不是一朝一夕的决策对错,很多人还不愿意承认,认为换了鲍尔默就能解决,认为开源 .Net,就能救 C#,就能救微软,其实这是一个天真的想法。微软战略从头到尾就没变过,开源其实相当于承认先前战略是失败的,可它却又没有提出一套新的思路和新的战略。事实上早在2000年时微软就进入了战略迷茫期,所以东一榔头西一棒子,没有重点,缺乏主题。虽然如此,还是能靠惯性继续生存,但是自我否定之后,新战略是什么呢?战略层的自我否定会极大的伤害企业向心力,让微软在未来变得更加艰难,同时又没有确立能够经得住实践验证的新战略,这又会使整个企业变得比原来更加迷茫。&br&&br&但微软能改变么?不能。微软没有办法提出一套和原来战略不兼容的新战略,除非完全把自己和多年经营的生态链砸碎。15年前的最佳改变期被其错过后,如今再怎么变都只能在原有战略框架下寻求小改变,时代的巨流,象一股巨大的引力场,吸引着身躯庞大的微软,无可奈何的掉进自己挖的坑里。&br&&br&&b&无可奈何的结局&/b&&br&&br&直接送货上门发达了,便利店就萧条了。网上购物兴起了,实体零售业也就死亡了。这就叫做 “新经济体” 代替老经济体。判断一个经济体是否衰落,看的从来不是它银行里还有多少钱,而是看它的商业模式是不是还成立。如今的微软,就是一个核心商业模式被颠覆了的企业。这不是开源能够救得了的,更不是盖茨复出能够救得了的。&br&&br&听到微软开源,让我想起之前 Sun公司 Solaris开源为 Open Solaris,希望用开源来挽救自己的颓势,没多久它就倒闭了。如今一项根本技术,比如操作系统,已经很难被一家公司所垄断。商业模式一旦被颠覆了,开源也不能成为救命稻草。&br&&br&事物强弱变换,新旧更替,本来就是自然界的基本规律。盖茨是一个聪明人,看到了未来的局面,知道什么叫月满则亏,水盈则溢,在微软最鼎盛的时候功成身退,高风亮节的做起了慈善,将最苦的差事留给了鲍尔默。所以,聪明的盖茨也是不会复出的,所以,其实我挺同情老鲍的。&br&&br&&b&结尾故事&/b&&br&&br&一开始就没想喷微软,我不是一个极端的人,一开始只是回答问题,建议题主用 Qt,远离微软的技术。但是完蛋了,一堆人上来围攻,那我真得正儿八经的把微软这事情说的清楚点才行了,否则我变成误导题主了。&br&&br&其实世界是欢迎微软改变的,我们这些从小学电脑就用着盗版微软系统的人,对微软也还是有感情的。但是微软这次能否迎来新生,还得看微软自己,我们是帮不了他的。&br&&br&最后,给大家分享个小故事:&br&&img src=&/a4e6e0fd43aa_b.jpg& data-rawwidth=&268& data-rawheight=&329& class=&content_image& width=&268&&&br&&blockquote&尼古拉·特斯拉(Nikola Tesla,1856年~1943年),被西方科学界的精英人物誉为是唯一堪比达·芬奇并超越爱因斯坦的伟大科学家,是人类有史以来最伟大的天才、发明创造的巨匠,但由于他身上同时也具有某种神秘甚至超自然的特质,也有人称他为神秘怪客或超人。是他发明和创造了交流电系统,对现代世界工业产生了深远影响。特斯拉引起的革命不仅限于电力工程,也涉及其他领域。他在科学和工程学领域取得了大约1000项发明。&/blockquote&&br&尼古拉·特斯拉,交流电的发明者,当年毅然选择放弃交流电专利带给他的暴利,将交流电公诸于众,从此交流电变成了一项免费的发明。因为他觉得,交流电这么基本的东西,是属于全人类的。如果当年特斯拉选择不开放交流电专利,那估计我们今天的社会,都得倒退一百年。&br&&br&一百年后的特斯拉汽车公司,在
Elon Musk 的领导下将自己领先世界的电动车发动机专利向世界开放,同样也是觉得电池车这种东西,是应该属于全人类的。而公司名称选作 “特斯拉” 也代表着向一百年前的 尼古拉·特斯拉致敬。
更新:擦,本来只有一句话,推荐Qt,远离微软,有人追问,补充了点,有人又追问,又补充了点,然后出了趟门回来,感觉跟捅了马蜂窝一样。既然都说到微软了,那就接着展开一下。 问题的本源 微软就是战线太长了,忙着去主导各种标准,制订各种框架,这样的话…
&p&明明是NIKE,NIKE的广告天天说&b&JUST DO IT&/b&,很多人以为&b&就是做IT&/b&,然后就走上了不归路。&/p&&p&直到我国普及英语教学后,大家英文水平好了,搞明白了just do it不是要你去做IT了,新一代人才没有被坑。所以NIKE坑了整整一代人。&/p&&br&&p&反观&b&Visual Studio&/b&这名字真心良心,很多人以为是&b&视觉工作室&/b&,一看就是摄影穷三代的东西,从一开始就避免了让人入坑……&/p&&br&&br&&p&谷歌权威翻译认证:&/p&&br&&img src=&/v2-bcc1e0aebe3417cbf2c032c_b.png& data-rawwidth=&731& data-rawheight=&196& class=&origin_image zh-lightbox-thumb& width=&731& data-original=&/v2-bcc1e0aebe3417cbf2c032c_r.png&&&br&&img src=&/v2-ded2b8c8eb3ec3e6a63d2f_b.png& data-rawwidth=&724& data-rawheight=&196& class=&origin_image zh-lightbox-thumb& width=&724& data-original=&/v2-ded2b8c8eb3ec3e6a63d2f_r.png&&
明明是NIKE,NIKE的广告天天说JUST DO IT,很多人以为就是做IT,然后就走上了不归路。直到我国普及英语教学后,大家英文水平好了,搞明白了just do it不是要你去做IT了,新一代人才没有被坑。所以NIKE坑了整整一代人。 反观Visual Studio这名字真心良心,很…
他们是想让你学习vim还有emacs等工具,让你在无尽的配置文件学习中产生挫败感以换取自己的优越感。。。&br&嗯,折叠我吧&br&我只想发个被折叠的答案,你们这些顶是什么心态 X= =X! - -# &br&这问题还是发CSDN吧,高端点发stackoverflow,知乎上讨论技术问题,一点意义都没有,你说是不是,还充斥着一群不会因为不会用Eclipse/VS等工具的水军,瞎起哄。&br&嗯,真的大牛,常见的工具都能玩转,用什么工具跟牛不牛根本没关系,对于开发人员来说,能为PM快速解决问题,就是王道,谁管你用什么工具!!!你VS、MyEclipse用的好,编译选项你也会去手改的,根本没区别,那些说VS掩盖了编译过程的人,十有八九自己都没摸熟练VS的编译配置项。&br&存在即合理,爱用啥用啥,软件开发是自己学的,相信自己的选择就好,别随便听信别人说的,如人饮水,冷暖自知,本来就这样。&br&---------------------------------------------------------&br&其实这个时代还有个神器 sublime text&br&jetbrains也出了好多神器,比如webstorm
他们是想让你学习vim还有emacs等工具,让你在无尽的配置文件学习中产生挫败感以换取自己的优越感。。。 嗯,折叠我吧 我只想发个被折叠的答案,你们这些顶是什么心态 X= =X! - -# 这问题还是发CSDN吧,高端点发stackoverflow,知乎上讨论技术问题,一点意义…
------突然间多了好多赞和关注,感觉不更新对不起这么多赞。。。&br&&br&请容我整理一下然后准备来个更新。。。&br&&br&多图预警!!!&br&&br&更新于&br&关于vs2013到底你要怎么用,新手拿到vs2013总是感觉这货好大好复杂,还有点卡,本次更新内容纯属为小白教学,大神们求放过,也欢迎各路大神批评指正,共同为新手们营造一个良好的学习氛围!&br&&br&&ul&&li&首先安装visual studio 2013,可以是社区版,也可以是专业版,目前&b&个人&/b&推荐专业版,社区版小白总是在安装时出各种问题。&b&安装过VS任何版本请务必使用系统-控制面板-程序与功能卸载干净!Windows7请安装SP1补丁后安装&/b&&br&&/li&&li&&a class=& wrap external& href=&///?target=https%3A///& target=&_blank& rel=&nofollow noreferrer&&学生可以通过:Microsoft DreamSpark下载专业版 需要验证身份和注册Microsoft账号(很有必要)&i class=&icon-external&&&/i&&/a&&/li&&li&安装过程异常枯燥,请保证电脑电量充足,可以去休息一个小时,让它慢慢装....&br&&/li&&br&&li&安装成功之后第一步就是登陆你的Microsoft账号.&img data-rawheight=&206& data-rawwidth=&282& src=&/3c3a1d350e119f31be6be_b.jpg& class=&content_image& width=&282&&&/li&&li&然后单击工具-选项,进行一些相关的设置(不知道什么意思就不要乱设置,否则后果自负)&img data-rawheight=&622& data-rawwidth=&416& src=&/253514ceb41df5a95c8a793ea1327821_b.jpg& class=&content_image& width=&416&&&/li&&li&在环境-同步设置里设置好&img data-rawheight=&493& data-rawwidth=&757& src=&/1cb668f9a4cf3cfb3f0532e_b.jpg& class=&origin_image zh-lightbox-thumb& width=&757& data-original=&/1cb668f9a4cf3cfb3f0532e_r.jpg&&&/li&&li&在文本编辑器里设置启用行号&img data-rawheight=&493& data-rawwidth=&757& src=&/1cb668f9a4cf3cfb3f0532e_b.jpg& class=&origin_image zh-lightbox-thumb& width=&757& data-original=&/1cb668f9a4cf3cfb3f0532e_r.jpg&&&/li&&li&开启垂直滚动条缩略图模式,设置为宽,对于预览一些代码量很大的程序很方便&br&&/li&&br&&li&&img data-rawheight=&499& data-rawwidth=&760& src=&/569a43bd336c5120bcbf2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&760& data-original=&/569a43bd336c5120bcbf2_r.jpg&&还有字体啊背景啊什么的自己去找吧&/li&&li&下面进入正题...文件-新建-项目&/li&&img data-rawheight=&105& data-rawwidth=&641& src=&/c0e82c94cad37d144afa_b.jpg& class=&origin_image zh-lightbox-thumb& width=&641& data-original=&/c0e82c94cad37d144afa_r.jpg&&&br&&ul&&li&选择Visual C++,画圈的三选一,爱用哪个用哪个.设置好项目名称,位置.&br&&/li&&br&&img data-rawheight=&614& data-rawwidth=&955& src=&/9f38bc55e19f3f97384e2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&955& data-original=&/9f38bc55e19f3f97384e2_r.jpg&&&li&我选的是Win32,不必和我保持一致.看不懂选项什么意思把鼠标悬停在选项上,会出现提示,也可以点击右上角的?查看帮助&br&&/li&&br&&img data-rawheight=&493& data-rawwidth=&685& src=&/66a57d05b6d9cff46a34f2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&685& data-original=&/66a57d05b6d9cff46a34f2_r.jpg&&&li&&b&以下这一步非常重要&/b&,&b&先取消&/b&预编译头,&b&再&/b&勾选&b&空项目&/b&,最后&b&取消勾选SDL检查&/b&,单击完成&br&&/li&&/ul&&br&&img data-rawheight=&494& data-rawwidth=&688& src=&/bf69eeb1f5d_b.jpg& class=&origin_image zh-lightbox-thumb& width=&688& data-original=&/bf69eeb1f5d_r.jpg&&&li&然后按图操作&br&&/li&&br&&img data-rawheight=&265& data-rawwidth=&579& src=&/3b9656ada28cca_b.jpg& class=&origin_image zh-lightbox-thumb& width=&579& data-original=&/3b9656ada28cca_r.jpg&&&br&&ul&&li&注意&b&文件扩展名为.c&/b&,.cpp是c++的&br&&/li&&br&&img data-rawheight=&614& data-rawwidth=&960& src=&/756afbb86e2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/756afbb86e2_r.jpg&&&li&可以设置自动隐藏,如果不小心点了叉关了找不到不用担心,窗口-重置窗口布局即可.&br&&/li&&br&&img data-rawheight=&94& data-rawwidth=&319& src=&/d6b9f0ef853b354b5eb54937baf21b2e_b.jpg& class=&content_image& width=&319&&&li&写个Hello World试试看,可以使用Ctrl+鼠标滚轮调整字体缩放,很方便.&br&&/li&&br&&img data-rawheight=&511& data-rawwidth=&1315& src=&/792aa744c5ed06fb3d75_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1315& data-original=&/792aa744c5ed06fb3d75_r.jpg&&&li&getchar();那里可以写system(&pause&);不要纠结细节......按F5调试&/li&&li&Shift+F5停止调试,还有F9,F10,F11,F4,快速注释/取消注释什么的自己去搜....善用Windows下的各种快捷键Ctrl+Z,Ctrl+C,Ctrl+V,Ctrl+S,Ctrl+L什么的。。按住Shift选择一行什么的...鼠标还是没有直接用键盘效率...&br&&/li&&img data-rawheight=&515& data-rawwidth=&829& src=&/1caf175d823dc413c1d11_b.jpg& class=&origin_image zh-lightbox-thumb& width=&829& data-original=&/1caf175d823dc413c1d11_r.jpg&&&li&在菜单栏空白处鼠标右键会出菜单,可以关掉不必要的&br&&/li&&img data-rawheight=&768& data-rawwidth=&1366& src=&/f2d56ea8d891cc8c2f6bd6_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&/f2d56ea8d891cc8c2f6bd6_r.jpg&&&li&反正写了这么多了就再多说点吧...选中你的源文件可以设置这个文件的属性.默认是开启/W3的.&br&&/li&&img data-rawheight=&608& data-rawwidth=&953& src=&/88cacdcb549f211bceb9b00d4b216183_b.jpg& class=&origin_image zh-lightbox-thumb& width=&953& data-original=&/88cacdcb549f211bceb9b00d4b216183_r.jpg&&&li&剩下的自己研究去吧.你还可以让编译器忽略一些警告,加编译选项什么的&a href=&///?target=https%3A///zh-cn/library/9s7c9wdw.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编译器选项&i class=&icon-external&&&/i&&/a&&/li&&li&说实话真挺无聊的......剩下的比如不能在一个项目多个源文件搞几个main()函数什么的,老师应该都有教....&/li&&li&&a class=& wrap external& href=&///?target=https%3A///zh-cn/library/vstudio/dd831853.aspx& target=&_blank& rel=&nofollow noreferrer&&欢迎使用 Visual Studio 2013&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=https%3A///zh-cn/library/ms310241& target=&_blank& rel=&nofollow noreferrer&&MSDN Library看英文的,机器翻译的....,中文更看不懂.&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&博客园 - 开发者的网上家园&i class=&icon-external&&&/i&&/a&&/li&&/ul&&br&&li&写到这里还挺感谢我们院长的,大一时候给了不少指导,挺重要的.&br&&/li&&/ul&&br&&br&&br&&br&以下为原内容:&br&vc++6.0那货就不要再用了,&br&&br&得说多少遍啊!&br& 说多少遍啊!&br& 多少遍啊!&br& 少遍啊!&br& 遍啊!&br& 啊!&br& !&br&&br&如果你为了考2级那就不用看了,直接给个赞就好了。&br&&br&其他的那些货那个不比vc++6.0强?你也不用纠结win8.1用不了的问题!&br&&br&vc++6.0这个破烂就像IE6一样神烦。&br&上学期被学弟学妹们追问vc++6.0在win8怎么装,开始我还耐心回答。。。后来真是受不了了,就给他们开了个会。&br&&br&我记得我大概就是这么说的:&br&&br&首先,不要用vc++6.0和turbo c.&br&&br&其次,建议使用IDE。Microsoft一套推荐vs2010(最低标准)-vs2013,以后要学c#什么的vs2013没商量;还有codeblocks,Dev c++.&br&&br&你爱用哪个就用哪个,反正我就是看好visual studio,除了启动速度完爆其他所有IDE,尤其调试简直超神。。而且一堆插件有的很有意思的~&br&&br&然后,书你要是想省心的话一定是 c primer plus 了,当然要买实体正版书了,电子版不打印出来那么厚怎么看,你是在逗我么。&br&&br&最后,不要相信大神都是用记事本手撸万行代码且一次运行编译通过无bug的。没事可以当乐子看看,别较真。&br&&br&PS:之后我的生活清静了好多。。。再也没有人跟我纠结这个问题了
------突然间多了好多赞和关注,感觉不更新对不起这么多赞。。。 请容我整理一下然后准备来个更新。。。 多图预警!!! 更新于 关于vs2013到底你要怎么用,新手拿到vs2013总是感觉这货好大好复杂,还有点卡,本次更新内容纯属为小白教学,大神们求放过,…
地方就在不久之前,无论是VC6还是VS2015都不适合学习C语言,因为两者对C根本没有好好支持,都是针对C++的IDE。然而最近VS2015 Update 1新增了用clang作为前端的选项,它对C99有良好的支持,再加上VS方便的编辑调试体验,你终于可以享受了。&br&新建项目后,打开项目属性,然后在toolset中选取clang即可。&br&&br&补充一下具体操作,首先你需要安装Visual Studio with Update 1,选择自定义安装,然后选中以下两项:&br&&img src=&/9bb4c609caad5e9388fd00_b.png& data-rawheight=&1288& data-rawwidth=&920& class=&origin_image zh-lightbox-thumb& width=&920& data-original=&/9bb4c609caad5e9388fd00_r.png&&和&br&&img src=&/97af5ab7e16e1c6db9fc1d_b.png& data-rawheight=&1288& data-rawwidth=&920& class=&origin_image zh-lightbox-thumb& width=&920& data-original=&/97af5ab7e16e1c6db9fc1d_r.png&&&br&&br&接下来我们只要在Visual C++的项目中即可使用clang的前端了。&br&实际上VC也支持大部分的C99特性,但是少数特性不支持。我们下面的例子中就有VC本身不支持的C99特性:&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&cp&&#include &stdio.h&&/span&
&span class=&k&&struct&/span& &span class=&n&&point&/span&
&span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&n&&x&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&n&&y&/span&&span class=&p&&;&/span&
&span class=&p&&};&/span&
&span class=&cm&&/* C99特性:restrict指针提示编译器该指针是访问所指目标的唯一方式 */&/span&
&span class=&k&&static&/span& &span class=&kr&&inline&/span& &span class=&kt&&void&/span& &span class=&nf&&swap_int&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&o&&*&/span& &span class=&kr&&restrict&/span& &span class=&n&&p1&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&o&&*&/span& &span class=&kr&&restrict&/span& &span class=&n&&p2&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&c1&&// 不要这样实现(C99特性://开头的注释)&/span&
&span class=&o&&*&/span&&span class=&n&&p1&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&p1&/span& &span class=&o&&^&/span& &span class=&o&&*&/span&&span class=&n&&p2&/span&&span class=&p&&;&/span&
&span class=&o&&*&/span&&span class=&n&&p2&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&p1&/span& &span class=&o&&^&/span& &span class=&o&&*&/span&&span class=&n&&p2&/span&&span class=&p&&;&/span&
&span class=&o&&*&/span&&span class=&n&&p1&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&p1&/span& &span class=&o&&^&/span& &span class=&o&&*&/span&&span class=&n&&p2&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&cm&&/* C99特性:static inline函数 */&/span&
&span class=&k&&static&/span& &span class=&kr&&inline&/span& &span class=&kt&&void&/span& &span class=&nf&&swap_point&/span&&span class=&p&&(&/span&&span class=&k&&struct&/span& &span class=&n&&point&/span& &span class=&o&&*&/span& &span class=&n&&p1&/span&&span class=&p&&,&/span& &span class=&k&&struct&/span& &span class=&n&&point&/span&&span class=&o&&*&/span& &span class=&n&&p2&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&swap_int&/span&&span class=&p&&(&/span&&span class=&o&&&&/span&&span class=&n&&p1&/span&&span class=&o&&-&&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&o&&&&/span&&span class=&n&&p2&/span&&span class=&o&&-&&/span&&span class=&n&&x&/span&&span class=&p&&);&/span&
&span class=&n&&swap_int&/span&&span class=&p&&(&/span&&span class=&o&&&&/span&&span class=&n&&p1&/span&&span class=&o&&-&&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&o&&&&/span&&span class=&n&&p2&/span&&span class=&o&&-&&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&kt&&int&/span& &span class=&nf&&main&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&k&&struct&/span& &span class=&n&&point&/span& &span class=&n&&p&/span& &span class=&o&&=&/span&
&span class=&p&&{&/span&
&span class=&p&&.&/span&&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span&
&span class=&p&&.&/span&&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&
&span class=&p&&};&/span&
&span class=&cm&&/* C99特性:复合型字面量 */&/span&
&span class=&n&&swap_point&/span&&span class=&p&&(&/span&&span class=&o&&&&/span&&span class=&n&&p&/span&&span class=&p&&,&/span&
&span class=&o&&&&/span&&span class=&p&&((&/span&&span class=&k&&struct&/span& &span class=&n&&point&/span&&span class=&p&&)&/span& &span class=&p&&{&/span& &span class=&p&&.&/span&&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&o&&-&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span& &span class=&p&&.&/span&&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&2&/span& &span class=&p&&}));&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&After swap, the point is (%d, %d)&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span& &span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&y&/span& &span class=&o&&&=&/span& &span class=&mi&&0&/span&&span class=&p&&)&/span& &span class=&k&&return&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&cm&&/* C99特性:变长数组 */&/span&
&span class=&kt&&int&/span& &span class=&n&&vla&/span&&span class=&p&&[&/span&&span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&y&/span&&span class=&p&&];&/span&
&span class=&n&&vla&/span&&span class=&p&&[&/span&&span class=&n&&p&/span&&span class=&p&&.&/span&&span class=&n&&y&/span& &span class=&o&&-&/span& &span class=&mi&&1&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&mi&&20&/span&&span class=&p&&;&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&The length of vla is %d&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span& &span class=&k&&sizeof&/span&&span class=&p&&(&/span&&span class=&n&&vla&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&k&&sizeof&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span&&span class=&p&&));&/span&
&span class=&k&&return&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&保存为扩展名为.c的文件后,如果用VC来编译,会出现数个编译错误。这是因为restrict被VC用于C++ AMP特性了,并非C99当中的restrict指针。另外变长数组特性也是不支持的。现在我们只要打开项目属性,找到Platform Toolset这一选项,选为Clang前端+C2后端的组合:&br&&img src=&/fcdef758bc5_b.png& data-rawheight=&1167& data-rawwidth=&1757& class=&origin_image zh-lightbox-thumb& width=&1757& data-original=&/fcdef758bc5_r.png&&再次编译该项目,就能完全编译通过,正确运行了!&br&目前的版本支持到Clang 3.7
地方就在不久之前,无论是VC6还是VS2015都不适合学习C语言,因为两者对C根本没有好好支持,都是针对C++的IDE。然而最近VS2015 Update 1新增了用clang作为前端的选项,它对C99有良好的支持,再加上VS方便的编辑调试体验,你终于可以享受了。 新建项目后,打…
===首次过百赞,我就分享一些自己的=====&br&1.字体设置成Consolas字体看代码更直观好看(分号看的更直观)个人感觉&br&&img src=&/d870edf49e_b.png& data-rawwidth=&582& data-rawheight=&235& class=&origin_image zh-lightbox-thumb& width=&582& data-original=&/d870edf49e_r.png&&2.VS工具栏-工具-选项-文本编辑器-所有语言-显示行号(找错讲解更方便)&br&&img src=&/1d4fbd6beaf6_b.png& data-rawwidth=&758& data-rawheight=&494& class=&origin_image zh-lightbox-thumb& width=&758& data-original=&/1d4fbd6beaf6_r.png&&3.分享一下我自己VS的布局&br&&img src=&/87a5fce95540_b.png& data-rawwidth=&1920& data-rawheight=&1048& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/87a5fce95540_r.png&&这样找工具看属性,连接数据库,看错误神马的都很方便(请无视项目工程,做的玩的^_^)&br&4.多用Home和End键&br&&b&Home键可以快速跳到这一行的首部,End键可以快速跳到这一行的尾部&/b&&br&&b&Shift+Home可以快速选中这一行光标前的部分,Shift+End可以快速选中这一行光标后的部分&/b&&br&&b&Shift配合方向键可以快速选择文字【这个技巧蛮方便的】&/b&&br&5.......其他的我再想想吧&br&==============================&br&F10:逐过程调试&br&F11:逐语句调试(一句一句执行)&br&F12:转到定义,到变量或函数定义的地方,与ctrl+-配合使用非常方便&br&Ctrl+]:匹配选中的括号(大括号、小括号都行),在多层循环+判断语句时非常方便&br&ctrl+Space:代码补全&br&ctrl+tab:在VS中切换打开的窗口,即切换各个文件&br&ctrl+I:递增搜索,与ctrl+F不同的是搜索期间不显示搜索对话框,且ctrl+F搜索下一个直接按Enter即可,而ctrl+I搜索下一个按ctrl+I或F3,Escape退出,连续按两次ctrl+I重复上次搜索&br&Ctrl+Shift+F:旧式的文件搜索对话框(与记事本中的搜索替换框差不多,可以替换)&br&Ctrl+F3:为当前选中的部分进行搜索(不需要再输入要搜索的内容)&br&Shift+Alt+Enter:最大化代码编写区域(代码全屏模式),即去掉所有其它辅助窗口只留下代码编写窗口,再按一次返回到原来界面&br&ctrl+K+C:注释一段代码块(好用)&br&ctrl+K+U:取消注释一段代码块(好用)&br&ctrl+K+D:代码整理(好用)&br&ctrl+K+F:只整理你选中的部分&br&Ctrl+L:删除当前行&br&Ctrl+M,:展开或折叠当前的代码(展开或收缩方法,类等)&br&转载请注明出处,谢谢
===首次过百赞,我就分享一些自己的===== 1.字体设置成Consolas字体看代码更直观好看(分号看的更直观)个人感觉 2.VS工具栏-工具-选项-文本编辑器-所有语言-显示行号(找错讲解更方便) 3.分享一下我自己VS的布局 这样找工具看属性,连接数据库,看错误神…
我用vs2008调试过vs2010……
我用vs2008调试过vs2010……
现在,我们深入探讨一下:&br&《如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件》。&br&&br&这个问题是比较常见且容易造成初学者困惑的,作为曾经撞了无数次南墙的初级代码狗终于看到了自己能够回答的问题,那么就让我来简单阐述一下造成这个问题的简单原理极其简单解决方法,如有错误纰漏敬请指正。&br&&br&/*我们讨论的是非托管的C++程序。*/&br&&br&为了方便说明,我们新建一个简单的控制台应用程序项目,直接如图:&br&&img src=&/c0ae4d0d9a_b.jpg& data-rawwidth=&752& data-rawheight=&322& class=&origin_image zh-lightbox-thumb& width=&752& data-original=&/c0ae4d0d9a_r.jpg&&&br&非常简单,一个使用了C++标准库的控制台应用程序,在装有开发环境的本机顺利执行出如下效果:&br&&img src=&/e63dffee38e_b.jpg& data-rawwidth=&328& data-rawheight=&77& class=&content_image& width=&328&&&br&真是一个旷世奇作,我们迫不及待地就此发给XP老哥炫耀,万万没想到:&br&&img src=&/deacd686bad90b39eb4d60dbcf763ebe_b.jpg& data-rawwidth=&598& data-rawheight=&114& class=&origin_image zh-lightbox-thumb& width=&598& data-original=&/deacd686bad90b39eb4d60dbcf763ebe_r.jpg&&&br&装逼不成反被XP老哥奚落:“负分滚粗!”&br&&br&这里我们遇到了题主遇到的问题之一,确实叫人纳闷,不过随便搜索一下就会有解决方法:&br&&img src=&/84d9eaadb98d_b.jpg& data-rawwidth=&768& data-rawheight=&459& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/84d9eaadb98d_r.jpg&&&br&是的,在项目配置属性中,&b&将平台工具集选择为&Visual Studio 2013 - Windows XP (v120_xp)&,即可解决“无效的 Win32 应用程序”问题&/b&。&br&&br&但是我们还要知其所以然,为什么?&br&项目默认的Visual Studio ) 与 Visual Studio 2013 - Windows XP(v120_xp) 生成出来的可执行文件有何区别,以至于前者在XP上执行会出现那样的错误?&br&&br&最直觉的方法自然是比较一下两版执行文件的区别,我们选用PE (&a href=&///?target=http%3A//zh.wikipedia.org/wiki/Portable_Executable& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Portable Executable&i class=&icon-external&&&/i&&/a&:32位或64位Windows操作系统使用的可执行程序或者动态链接库的文件格式)工具 &a href=&///?target=http%3A///PE_tools/Editor/stdupe/Stud_PE.zip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stud_PE&i class=&icon-external&&&/i&&/a& 进行PE文件头结构比较,很容易看到区别:&br&&img src=&/f3ebffbdbbbf37cc8888_b.jpg& data-rawwidth=&367& data-rawheight=&384& class=&content_image& width=&367&&&br&看到打红叉的地方,就是两个文件不同之处,其他地方几乎没有区别。&br&关于PE文件结构是另外一个话题,我们暂不深入讨论。&br&单就这两处我们顾名思义一下就很容易明白:&br&MajorOSVersion ,(目标)操作系统主版本号 ,选择默认平台工具集的文件的值是6,后者是5。&br&MinorOSVersion ,(目标)操作系统次版本号,前者是0,后者是1。&br&MajorSubsystemVersion,(目标)Win32子系统主版本号,前者是6,后者是5。&br&MinorSubsystemVersion,(目标)Win32子系统次版本号,前者是0,后者是1。&br&&br&总结一下:一个是6.0 ,一个是5.1 。&br&很明显5.1不就是XP的版本号么,6.0就是Vista呗?&br&我们是否可以认为,项目默认选择的“平台工具集”生成的可执行文件是不能在6.0以下版本的Windows运行的?&br&&br&试验结果是:当我把6.0手动修改成5.1之后,这个文件立刻可以正常在XP里运行了,事实上Major/MinorOSVersion的值似乎没有起到什么作用,仅仅修改XxxxxSubsystemVersion的值就可以保证程序顺利执行起来了。反之亦然。同时还发现:在XP中,改为5.1可以,5.2及更高就不行。&br&&br&对于这个问题的认识虽然仍流于表面,但由于知识有限,我们就不再深究PE结构中的这几个值的深层次含义了。当然如有大牛指点一二就更好了。&br&&br&现在好了!我们不但解决了XP的运行问题,还大致了解了问题的根源。那么让我们继续发布吧!&br&&br&将新的、XP的、“5.1的”版本发给XP老哥:&br&&img src=&/0b00e7a38fad691e26f12f1_b.jpg& data-rawwidth=&588& data-rawheight=&115& class=&origin_image zh-lightbox-thumb& width=&588& data-original=&/0b00e7a38fad691e26f12f1_r.jpg&&&br&我勒个去?你等等,我再编译一个release版本…… 试试:&br&&img src=&/3b1e351a004eef240a1422ccb55ad43d_b.jpg& data-rawwidth=&580& data-rawheight=&116& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/3b1e351a004eef240a1422ccb55ad43d_r.jpg&&&br&擦?不是说好的“Release&吗?你等等,不就是一个dll文件吗,我这里有!我发给你……&br&我从自己的系统(Win 8.1 x64)C:\Wdinwos\system32 文件夹找一个MSVCP120.DLL发过去:&br&&img src=&/f44f4bbcea40797ace7637253dbb8047_b.jpg& data-rawwidth=&652& data-rawheight=&120& class=&origin_image zh-lightbox-thumb& width=&652& data-original=&/f44f4bbcea40797ace7637253dbb8047_r.jpg&&&br&是啊,这不是逗呢?拿64位的dll文件去冒充32位,能行? 重新去VS目录里扒一个正确的32位msvcp120.dll 补上:&br&&img src=&/5ecf4c9dce3b570f58134e9e_b.jpg& data-rawwidth=&589& data-rawheight=&222& class=&origin_image zh-lightbox-thumb& width=&589& data-original=&/5ecf4c9dce3b570f58134e9e_r.jpg&&&br&又来,这次叫做MSVCR120.dll ,不仔细看还真没认出来。继续补上:&br&&img src=&/73f1f261e22ec6a5ba66f_b.jpg& data-rawwidth=&659& data-rawheight=&310& class=&origin_image zh-lightbox-thumb& width=&659& data-original=&/73f1f261e22ec6a5ba66f_r.jpg&&&br&呵呵呵呵呵,终于得以正确运行了,但是这么狼狈的炫耀怎么能让人高兴起来呢?&br&&br&经过一番折腾,好歹知道了是因为缺少文件,那么下次发布程序把这些瓶瓶罐罐DDLL都带上打包不就行了吗?没错,确实是这么个道理,但总感觉很不专业的样子。&br&&br&所以一个正常的解决方案就是和其他答案中所说的那样,让目标机器安装 &br&&a class=& wrap external& href=&///?target=http%3A///zh-cn/download/details.aspx%3Fid%3D40784& target=&_blank& rel=&nofollow noreferrer&&VisualC++Redistributable Packages forVisualStudio2013&i class=&icon-external&&&/i&&/a& 。&br&&br&这个东西的作用就是:&br&&blockquote&安装运行使用 &b&Visual&/b&&b&Studio&/b&&b&2013&/b& 生成的 &b&C++&/b& 应用程序时所需的运行时组件。&/blockquote&&br&简单观察安装后系统中多出了哪些文件:&br&&img src=&/23dcb90cde0a9c6a690a8f_b.jpg& data-rawwidth=&795& data-rawheight=&605& class=&origin_image zh-lightbox-thumb& width=&795& data-original=&/23dcb90cde0a9c6a690a8f_r.jpg&&&br&这样一看,“运行时组件”就变得直观和具体了。&br&它们都是什么呢?我们先去VS的安装目录中看一下:&br&&br&&img src=&/1a1d2b4c663e4a9e7082_b.jpg& data-rawwidth=&622& data-rawheight=&220& class=&origin_image zh-lightbox-thumb& width=&622& data-original=&/1a1d2b4c663e4a9e7082_r.jpg&&通过路径很容易理解,这是有关VC的redist(再发行)的东西,我们进x86看一下:&br&&br&&img src=&/65356fdf2a2b16b56cccff0_b.jpg& data-rawwidth=&568& data-rawheight=&194& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&/65356fdf2a2b16b56cccff0_r.jpg&&&br&有关CRT(运行时库),MFC,MFCLOC(MFC的本地化文件)等等,我们看看CRT里面:&br&&br&&img src=&/ecf4a3e0b7d06a_b.jpg& data-rawwidth=&689& data-rawheight=&156& class=&origin_image zh-lightbox-thumb& width=&689& data-original=&/ecf4a3e0b7d06a_r.jpg&&看到了眼熟的这两个dll了,实际上你参考前面那个XP多出文件的图片,那些dll都能在这里找到。&br&这就是 Visual C++ Redistributable 包括的东西,每个VS版本都不一样。VS2013对应的就是120。&br&&br&那管它是VS2013还是2012还是2008,对应的发行包给装上不就完了。&br&&br&没错。但是我们还要继续研究一下,至少,研究一下如何让一个可执行文件“独立”运行在XP上。&br&&br&回到项目配置,如下图:&br&&img src=&/bc9cfa06c45_b.jpg& data-rawwidth=&768& data-rawheight=&459& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/bc9cfa06c45_r.jpg&&&br&我们看到,运行库这一项,包含4种选择。&br&废话不多说,我们简单粗暴干脆每一种都生成一个进行比较:&br&&img src=&/b666f08c3aa429bfacd40_b.jpg& data-rawwidth=&977& data-rawheight=&759& class=&origin_image zh-lightbox-thumb& width=&977& data-original=&/b666f08c3aa429bfacd40_r.jpg&&&br&四种版本,分别起了对应的名称,多线程(MT),多线程DLL(MD),多线程调试(MTd),多线程调试DLL(MDd)。&br&利用 &a href=&///?target=http%3A///PE_tools/Editor/stdupe/Stud_PE.zip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stud_PE&i class=&icon-external&&&/i&&/a& 观察比较它们的 函数导入表 ,发现:&br&1. 多线程DLL (MD)和 多线程调试DLL (MDd)&br&两者都导入了2个MSVCxxxx.dll (黄箭头所指),但细看又不同,调试版本(MDd)导入的是MSVCP120D.dll和MSVCR120D.dll,比非调试(MD)的那个都多一个字母D。很明显这是配套给调试版的运行时库。而我们之前安装的发行包所部署的都是不带D的版本,是给Release版的程序配套使用的。&br& 顺便一提MSVCP代表MicroSoft Visual C++(Plus) ,MSVCR则代表MicroSoft Visual C(没有+)Runtime。 一个是C++运行时库一个是C运行时库。&br&&br&2.多线程(MT) 与 多线程调试(MTd)貌似一样,都没有MSVCP和MSVCR函数导入,只有Kernel32.dll。同时观察这两个文件的体积,都比MD或MDd大了很多,这正是它们不需要导入运行时库DLL函数的原因,因为它们把运行时库静态编译到自己的文件中去了。这也代表着它们运行的时候不会再依赖外部的运行时库DLL文件。&br&&br&所以答案就在这里,想要你的exe独立运行在XP中:&br&1.&b&将平台工具集选择为&Visual Studio 2013 - Windows XP (v120_xp)&。&/b&&br&&b&2.将运行库选择为 【多线程 /MT 】或【多线程调试 /MTd】。&/b&&br&&b&3.当然如果使用了MFC,同理的要设置【在静态库中使用MFC】:&/b&&br&&img src=&/e7a89c0ca62dfdb4016099a_b.jpg& data-rawwidth=&768& data-rawheight=&459& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/e7a89c0ca62dfdb4016099a_r.jpg&&&br&&br&&br&事情很简单,大致就是这样了。
现在,我们深入探讨一下: 《如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件》。 这个问题是比较常见且容易造成初学者困惑的,作为曾经撞了无数次南墙的初级代码狗终于看到了自己能够回答的问题,那么就让我来简单阐述一下造成这个问题的…
VS在这里用的魔法叫做Debug Visualizer,通过叫natvis的xml文件描述对象的内存布局以及如何显示。如果希望自己的类也能有自定义的显示,只要写一个natvis文件即可。&br&&br&1. 在工程中添加魔法卷轴。&img src=&/8afb7a45c2eff5_b.png& data-rawheight=&289& data-rawwidth=&942& class=&origin_image zh-lightbox-thumb& width=&942& data-original=&/8afb7a45c2eff5_r.png&&2. 在卷轴上写好要吟唱的魔法。&br&&div class=&highlight&&&pre&&code class=&language-xml&&&span class=&cp&&&?xml version=&1.0& encoding=&utf-8&?&&/span&
&span class=&nt&&&AutoVisualizer&/span& &span class=&na&&xmlns=&/span&&span class=&s&&&/vstudio/debugger/natvis/2010&&/span&&span class=&nt&&&&/span&
&span class=&nt&&&Type&/span& &span class=&na&&Name=&/span&&span class=&s&&&TestVector&*&&&/span&&span class=&nt&&&&/span&
&span class=&nt&&&DisplayString&&/span&{{size={num}}}&span class=&nt&&&/DisplayString&&/span&
&span class=&nt&&&Expand&&/span&
&span class=&nt&&&Item&/span& &span class=&na&&Name=&/span&&span class=&s&&&[size]&&/span& &span class=&na&&ExcludeView=&/span&&span class=&s&&&simple&&/span&&span class=&nt&&&&/span&num&span class=&nt&&&/Item&&/span&
&span class=&nt&&&ArrayItems&&/span&
&span class=&nt&&&Size&&/span&num&span class=&nt&&&/Size&&/span&
&span class=&nt&&&ValuePointer&&/span&ptr&span class=&nt&&&/ValuePointer&&/span&
&span class=&nt&&&/ArrayItems&&/span&
&span class=&nt&&&/Expand&&/span&
&span class=&nt&&&/Type&&/span&
&span class=&nt&&&/AutoVisualizer&&/span&
&/code&&/pre&&/div&3. 见证魔法的奇迹。&br&&img src=&/f09a0cc9ee854f58e7bd64bba1c94880_b.png& data-rawheight=&448& data-rawwidth=&885& class=&origin_image zh-lightbox-thumb& width=&885& data-original=&/f09a0cc9ee854f58e7bd64bba1c94880_r.png&&4. 施法中重写卷轴,实时生效哦!&br&&img src=&/5c1c32fceb0b16c0e24a_b.png& data-rawheight=&322& data-rawwidth=&1086& class=&origin_image zh-lightbox-thumb& width=&1086& data-original=&/5c1c32fceb0b16c0e24a_r.png&&&br&&br&参考: &a href=&///?target=https%3A///en-us/library/jj620914.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Create custom views of native objects&i class=&icon-external&&&/i&&/a&&br&内置的natvis文件在%VSINSTALLDIR%Common7\Packages\Debugger\Visualizers,可以找到关于STL的作为参考。
VS在这里用的魔法叫做Debug Visualizer,通过叫natvis的xml文件描述对象的内存布局以及如何显示。如果希望自己的类也能有自定义的显示,只要写一个natvis文件即可。 1. 在工程中添加魔法卷轴。2. 在卷轴上写好要吟唱的魔法。 &?xml version="1.0" encoding=…
那必须是 &a href=&///?target=http%3A///achievements/visualstudio& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Visual Studio Achievements &i class=&icon-external&&&/i&&/a&插件了。&br&&br&想想你周五或周六晚上的时候在默默编程的时候,突然右上角跳出一个“Achievement Unlocked: &b&Lonely&/b&”是一件多么有成就感的事情。
那必须是 插件了。 想想你周五或周六晚上的时候在默默编程的时候,突然右上角跳出一个“Achievement Unlocked: Lonely”是一件多么有成就感的事情。
价格 Xcode 免费胜出。剩下的Visual Studio 领先了不知道多少倍……&br&另外 Xcode 比包括IntelliJ在内 jetbrains 出的东西还要差一个身位。&br&像我最近都开始尝试用AppCode了,确实比 Xcode 好用……&br&============================================&br&Xcode 让我最不能忍的是会莫名其妙的崩溃掉……&br&============================================&br&Vim和Emacs大概是这个。&br&&img src=&/54df8fd6aa598d950d993ac_b.jpg& data-rawwidth=&554& data-rawheight=&416& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&/54df8fd6aa598d950d993ac_r.jpg&&&br&高手用起来照样可以乱军丛中取敌上将首级,像这样:&br&&img src=&/a4f80fd792e775aa01a85c91d1b0424e_b.jpg& data-rawwidth=&400& data-rawheight=&400& class=&content_image& width=&400&&&br&Xcode大概是这个。&br&&img src=&/debd9d77c6_b.jpg& data-rawwidth=&676& data-rawheight=&351& class=&origin_image zh-lightbox-thumb& width=&676& data-original=&/debd9d77c6_r.jpg&&IntelliJ那堆大概是这个。&br&&img src=&/0ebf2ba062e02_b.jpg& data-rawwidth=&570& data-rawheight=&333& class=&origin_image zh-lightbox-thumb& width=&570& data-original=&/0ebf2ba062e02_r.jpg&&VS是这个。&br&&img src=&/1ad9a40fc4b065d0fe4fc7b_b.jpg& data-rawwidth=&1200& data-rawheight=&664& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&/1ad9a40fc4b065d0fe4fc7b_r.jpg&&&br&&br&以上内容非常认真。
价格 Xcode 免费胜出。剩下的Visual Studio 领先了不知道多少倍…… 另外 Xcode 比包括IntelliJ在内 jetbrains 出的东西还要差一个身位。 像我最近都开始尝试用AppCode了,确实比 Xcode 好用…… ============================================ Xcode 让我…
VS 团队拨了一小点人出来虐狗了…&br&&br&&b&“让你们看看什么叫专业的。” &/b&看着 Sublime Atom Brackets 此起彼伏得折腾了几年就叫喧着不要 IDE 只要 Editor ,VS 摸摸 VSC 的头如是说。
VS 团队拨了一小点人出来虐狗了… “让你们看看什么叫专业的。” 看着 Sublime Atom Brackets 此起彼伏得折腾了几年就叫喧着不要 IDE 只要 Editor ,VS 摸摸 VSC 的头如是说。
卧槽槽槽槽槽…………&br&都Win10了,还在VC6。。。。。。&br&国内大学的C语言课到底有多脱离时代啊!!!!!&br&不过我04年用的是Turbo C~~~~~&br&=====================&br&感慨完了。题主请使用Visual Studio 2015 Community,或者MinGW + gmake + Notepad++。&br&=====================&br&随便再罗列几个windows下可用、免费、支持C++的IDE:&br&&ul&&li&QtCreator,&/li&&li&Eclipse,&/li&&li&NetBeans,&/li&&li&CodeBlocks&/li&&/ul&然后,你作为计算机专业学生,要求必然和混二级的不一样。请脱离IDE,了解预处理、编译、链接、动态库等概念。可以看《程序员的自我修养》入门。&br&====================&br&你就选择编程语言里面的C++的部分就行。记得把MFC装上,否则C++标准库里面有个宏找不到。
卧槽槽槽槽槽………… 都Win10了,还在VC6。。。。。。 国内大学的C语言课到底有多脱离时代啊!!!!! 不过我04年用的是Turbo C~~~~~ ===================== 感慨完了。题主请使用Visual Studio 2015 Community,或者MinGW + gmake + Notepad++。 ==…
几年前我公司开发的一个产品。用户反馈说360会报错,有病毒。&br&我们都很纳闷,看了代码没有发现有越界的地方。为此我们还换了几款杀毒软件,都没有报毒。&br&叫用户卸载360吧,也不现实,你可以说服1个,10个用户,甚至500个用户,但是个用户呢。&br&最后没办法咨询了360,360很&b&淡定&/b&的给了我们一个“解决方案”,把我们发布的程序提交给他们“审核”,发现没问题后就会加入白名单,为此要提供一笔“审核费用”。&br&得到这个方案后我们肯定是很不情愿的,但是没办法只能妥协,真是比吃瘪还难受。&br&&br&戏剧的还在后面。。。。&br&—————————————————————————————————————&br&我们领导决定得把这笔费用赚回来,于是很没节操的在程序里添加了一个广告位。呵呵哒。
几年前我公司开发的一个产品。用户反馈说360会报错,有病毒。 我们都很纳闷,看了代码没有发现有越界的地方。为此我们还换了几款杀毒软件,都没有报毒。 叫用户卸载360吧,也不现实,你可以说服1个,10个用户,甚至500个用户,但是个用户呢。 最后…
对比xcode VS在调试方面已经超神了。&br&&br&同样,在帮助你理解一份陌生的代码上,VS也已经接近神了:&br&&img src=&/5abcaa016c458bfe2006fac_b.jpg& data-rawwidth=&677& data-rawheight=&513& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&/5abcaa016c458bfe2006fac_r.jpg&&
对比xcode VS在调试方面已经超神了。 同样,在帮助你理解一份陌生的代码上,VS也已经接近神了:
如须进行与图像相关的 C/C++ 开发,墙裂推荐 &a href=&///?target=https%3A//visualstudiogallery./e682d542-7ef3-402c-b857-bbfba714f78d& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Image Watch extension&i class=&icon-external&&&/i&&/a& ~&br&&br&Image Watch 可以在 debug 时直接显示图像的像素数据,可以灵活设置图像的显示方式,譬如自动归一化、用伪色显示等等。&br&&br&Image Watch 默认支持 OpenCV 以及 Windows SDK 中的部分图像类型,如 cv::Mat, IplImage 等。甚至通过定制 .natvis 文件,我们可以任意拓展 Image Watch 的支持对象。&br&&br&譬如在我自己的项目中,能够用 Image Watch 来 Debug 自定义的图像类型:&br&&img src=&/24a5e7a0786cecff8eafca579bd077b2_b.png& data-rawwidth=&900& data-rawheight=&507& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&/24a5e7a0786cecff8eafca579bd077b2_r.png&&&br&放大可以直接看像素值&img src=&/52dd61feed129cde83afeb6_b.png& data-rawwidth=&865& data-rawheight=&506& class=&origin_image zh-lightbox-thumb& width=&865& data-original=&/52dd61feed129cde83afeb6_r.png&&&img src=&/44ef6a004f63ad9adb966473ccb6d891_b.png& data-rawwidth=&860& data-rawheight=&504& class=&origin_image zh-lightbox-thumb& width=&860& data-original=&/44ef6a004f63ad9adb966473ccb6d891_r.png&&&br&用来 debug 矩阵类型也比 vs 自带的 watch 方便不少&br&&img src=&/dc4eaf68fc6ce_b.png& data-rawwidth=&635& data-rawheight=&502& class=&origin_image zh-lightbox-thumb& width=&635& data-original=&/dc4eaf68fc6ce_r.png&&&br&&br&如何写 .natvis 详见 &a href=&///?target=http%3A///en-us/um/redmond/groups/ivm/imagewatchhelp/imagewatchhelp.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Image Watch Help&i class=&icon-external&&&/i&&/a&&br&这里有个坑:自定义的 .natvis 文件需要放到 C:\Users\{用户名}\Documents\Visual Studio 2015\Visualizers 下面才能被 Image Watch 识别,否则只会显示 invalid ...&br&&br&Happy Coding!
如须进行与图像相关的 C/C++ 开发,墙裂推荐
~ Image Watch 可以在 debug 时直接显示图像的像素数据,可以灵活设置图像的显示方式,譬如自动归一化、用伪色显示等等。 Image Watch 默认支持 OpenCV 以及 Windows SDK 中的部分图像类…
&p&李如一他们弄得那个IT公论,最近有一期是吐槽ObjC的。吐到最后, &a class=&member_mention& href=&///people/e5fb0aab23f1ebcad178c79& data-tip=&p$b$e5fb0aab23f1ebcad178c79& data-hash=&e5fb0aab23f1ebcad178c79& data-hovercard=&p$b$e5fb0aab23f1ebcad178c79&&@涛吴&/a& 说,理想的用户界面语言应该是界面的描述和逻辑分开的,想了半天举不出例子来,其实说的不就是WPF吗?还在用Interface Builder画界面的题主,你感受一下。&/p&&br&&p&Visual Studio已经不仅仅是一个编程的IDE了,它是一套Application Lifecycle Management (ALM) 工具,结合它背后的比如说Visual Studio Online,你可以用VS来管理你的项目,从设计,开发,到测试,部署和维护的整个生命周期。如果从这个角度来理解所谓的“集成开发环境 (IDE)”的话,VS显然比XCode先进太多了。VS一个工具,可以支持从移动设备,到服务器端应用,到大型企业应用,到云应用的开发。VS还是一个很开放的IDE环境,插件多如牛毛,如果你真喜欢Emacs或者Vim,一个插件就搞定了。即便只是单纯从传统的IDE的角度,在IDE里画UI,基本上也是很落伍的做法了。&/p&&br&&p&其实更关键的问题是,XCode无法让人看到改进的希望。Visua}

我要回帖

更多关于 苹果5s一直是开机画面 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信