阅读更多

19顶
3踩

研发管理

原创新闻 代码优化是把双刃剑

2012-12-21 16:13 by 副主编 wangguo 评论(25) 有19926人浏览
代码优化的好处多多,但是这并不意味着所有的代码都需要进行优化,有时过度的优化反而适得其反——费时、费力、不讨好。

“现代计算机科学的鼻祖”Donald Knuth曾说过“过早的优化是万恶之源”,因为:让正确的程序更快,要比让快速的程序正确容易得多。

在项目开发中,总是有程序员浪费宝贵的时间去改进那些不需要改进的代码,而没有通过所做的改进增加价值。在对项目进行优化时,究竟哪些地方应该优化,应该如何优化,哪些不应该优化呢?你需要先来了解一下本文所说的这7件事。



1.  究竟要优化什么?

在优化工作开始的时候,你还尚未明确优化内容和目的,那么你很容易陷入误区。在一开始,你就应该清楚地了解你要达到的效果,以及其他优化相关的各种问题。这些目标需要明确指出(至少精通技术的项目经理可以理解和表达它),接下来,在整个优化过程中,你需要坚持这些目标。

在实际的项目开发中,经常会存在各种各样的变数。可能一开始时要优化这一方面,随后你可能会发现需要优化另一方面。这种情况下,你需要清晰地了解这些变化,并确保团队中的每个人都明白目标已经发生了变化。

2.  选择一个正确的优化指标

选择正确的指标,是优化的一个重要组成部分,你需要按照这些指标来测量优化工作的进展情况。如果指标选择不恰当,或者完全错误,你所做的努力有可能白费了。

即使指标正确,也必须有一些辨别。在某些情况下,将最多的努力投入到运行消耗时间最多的那部分代码中,这是实用的策略。但也要记住,Unix/Linux内核的大部分时间花费在了空循环上。

需要注意的是,如果你轻易选择了一个很容易达到的指标,这作用不大,因为没有真正解决问题。你有必要选择一个更复杂的、更接近你的目标的指标。

3.  优化在刀刃上

这是有效优化的关键。找到项目中与你的目标(性能、资源或其他)相背的地方,并将你的努力和时间用在那里。

举一个典型的例子,一个Web项目速度比较慢,开发者在优化时将大部分精力放在了数据库优化上,最终发现真正的问题是网络连接慢。

另外,不要分心于容易实现的问题。这些问题尽管很容易解决,但可能不是必要的,或与你的目标不相符。容易优化并不意味着值得你花费工夫。

4.  优化层次越高越好

在一般情况下,优化的层次越高,就会越有效。根据这个标准,最好的优化是找到一个更有效的算法。

举个例子,在一个软件开发项目中,有一个重要的应用程序性能较差,于是开发团队开始着手优化,但性能并没有提升太多,之后,项目人员交替,新的开发人员在检查代码时发现,性能问题的核心是由于在表中使用了冒泡排序算法,导致成千上万项的增加。

尽管如此,高层次的优化也不是“银弹”。一些基本技术,如将所有东西移到循环语句外,也可以产生一些优化的效果。通常情况下,大量低层次的优化可以产生等同于一个高层次优化的效果。

还需要注意的是,高层次优化,会减少一些代码块,那么你之前对这些代码块所做的优化就没有任何意义了,因此,刚开始就应该考虑高层次的优化。

5.  不要过早优化

在项目早期就进行优化,会导致你的代码难以阅读,或者会影响运行。另一方面,在项目后期,你可能会发现之前所做的优化没有起到任何作用,白白浪费了时间和精力。

正确的方式是,你应该将项目开发和优化当作两个独立的步骤来做。

6.  依赖性能分析,而不是直觉

你往往会认为你已经知道哪里需要优化,这是不可取的,尤其是在复杂的软件系统中,性能分析数据应该是第一位的,最后才是直觉。

优化的一个有效的策略是,你要根据所做工作对优化效果的影响来进行排序。在开始工作之前找到影响最大的“路障”,然后再处理小的“路障”。

7.  优化不是万金油

优化最重要的规则之一是,你无法优化一切,甚至无法同时优化两个问题。比如,优化了速度,可能会增加资源利用;优化了存储的利用率,可能会使其他地方放慢。你需要权衡一下,哪个更符合你的优化目标。

英文原文:Code Optimization as a Double-Edged Sword
  • 大小: 42.4 KB
19
3
评论 共 25 条 请登录后发表评论
25 楼 pangyi 2012-12-27 10:44
laogao3232 写道
3个人月的活,给你3个人,半个月交活,你给我重构,优化一下看看。


项目周期紧张、人员投入不足等,这些事我们经常遇到。对项目来说,我们只要做完就行了。但对个人来说,个人能力的提升才是关键。

对程序员来说,坚持重构,坚持优化,才是提升解决问题能力的最佳路径。
24 楼 if(i!=我){} 2012-12-27 10:16
bookong 写道
jerry.chen 写道
laogao3232 写道
3个人月的活,给你3个人,半个月交活,你给我重构,优化一下看看。

很是赞同这位同仁的话,我也深受其害!

但往往这种情况的结果是根本不可能半个月交货,可能延期了半年……

很对,屡见不鲜。
23 楼 bookong 2012-12-27 10:07
jerry.chen 写道
laogao3232 写道
3个人月的活,给你3个人,半个月交活,你给我重构,优化一下看看。

很是赞同这位同仁的话,我也深受其害!

但往往这种情况的结果是根本不可能半个月交货,可能延期了半年……
22 楼 sgp420 2012-12-27 09:11
学习了....
21 楼 jerry.chen 2012-12-26 17:12
laogao3232 写道
3个人月的活,给你3个人,半个月交活,你给我重构,优化一下看看。

很是赞同这位同仁的话,我也深受其害!
20 楼 laogao3232 2012-12-26 15:45
3个人月的活,给你3个人,半个月交活,你给我重构,优化一下看看。
19 楼 pangyi 2012-12-26 11:16

优秀的代码是不断重构出来的。持续重构的前提是代码正确。

坚持重构,不追求完美,但求更佳,才是代码优化的根本。

18 楼 yjq886 2012-12-26 10:56
由于各种因素的限制(时间,设计,技术,人员素质等),基本上每个软件项目都有优化的必要。好文章是改出来的,好程序也是。但是是否需要优化,怎么优化由很多因素决定。优化需要花费的成本,是一个必须考虑的问题。一个正确的、运行稳定、代价适中的程序更容易被接受。
17 楼 xuchengfeifei 2012-12-25 22:18
代表===》代码
16 楼 xuchengfeifei 2012-12-25 22:18
优化是必要的,有些观点本人也不是很赞同,优化代表应该在架构之初很多问题都要考虑进去。如果一个项目有上百人开发。如果开始之前没有准备。每个人的想法和思维都不一样。不按照架构优化来调整,估计到后期都无法优化。我觉得项目架构初期就要把一些项目的开发习惯优化好。代表实时的检查。。。。
15 楼 if(i!=我){} 2012-12-25 13:01
zui4yi1 写道
if(i!=我){} 写道
zui4yi1 写道
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。

前期?前期不叫优化,叫调整——主要是架构和技术实现方式上的调整。前期就谈“优化”,个人觉得不可思议!!!!

优化的范围很广啊,一个循环体,一个方法,一个类,等等,不一定要上升到架构和技术实现方式。

如果设计上能做到一个方法只有几十行,它能容纳上百行的大循环吗?
14 楼 if(i!=我){} 2012-12-25 12:59
zui4yi1 写道
lyh20081984 写道
if(i!=我){} 写道
zui4yi1 写道
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。

前期?前期不叫优化,叫调整——主要是架构和技术实现方式上的调整。前期就谈“优化”,个人觉得不可思议!!!!


这话我不太赞同,虽说前期也可以进行优化,但这不是必须要这样选择,如果在前期的开发过程中,看出了相关的问题,那么也不要急于去做出修改,理由如下:
1. 你对所发现的问题所做出的修改策略不一定是最好的,在这种情况之下急忙做出修改反而不好,在后期或者项目完成之后,你才能真正知道原问题的最佳修改方法。
2. 发现问题不仅仅是解决问题这么简单,知道怎么解决,如何更好的解决才是关键。
3. 发现问题我们可以记录问题,以后面的程序开发中要注意这个问题,进行改进,前期的问题待项目完成之后再做最终解决方案


我的理解大概是这样,经验是积累起来的,并且我强调的是不忙的时候。
1. 咱们不能过分依赖后期,你怎么知道你后期的方案一定是最优方案?你能确定有那么多时间去考虑最好的方案?你能确定后期中你的方案不是脑海中一闪而过的想法?
2. 如何解决当然是关键,但肚子里得有墨水,经验是积累起来的。
3. 这个还是太依赖后期,待项目完成后,如果问题太多,再做最终方案,会不会相当于重新开发了?

要分清主次。还是那句话:“设计大于编码,规则大于实现”。前期就是设计,前期的编码也只是为了验证实现设计的可能性。
等主要设计基本成熟了,编码就会变成一项相当无聊的重复工作,也不会有多少机会去想什么优化(在设计基本正确的前提下)。

真遇到性能瓶颈怎么办?先问问自己设计好了没——用好的设计处理业务,一定不会在逻辑上犯重大错误,自然也不会是引起性能劣化主因。
接下来就是运行界面上的优化了。内存?IO?网络?总不能三个占全吧?
这时再试着优化:
过多的数据访问?缓存!占用带宽大?压缩(诸如图片之类)!……还不行呢?修改硬件解决方案!因为你知道瓶颈在哪里,而哪里的资源是过剩的。
如果一个软件运行稳定,体验良好,客户会不介意提高硬件上的投入的。试想:32G内存多少钱?一个员工半个月工资?软件出个故障,解决一天,就是上百号人一天的工资。
另外,因为操作体验差而骂娘的绝对比抱怨多花几千块钱多得多。

千万别盯着什么“最好”、“最优”:空间复杂度、计算复杂度、设计复杂度三者在一定程度上是无解的对立关系。即省空间又省时间的系统一定是错综复杂让人不想再看的(汇编就是干这个的),而在客户那里也不见得有什么意义。
相反,设计良好的系统,具体形态的伸缩性是很大的,优化时也可以因地制宜。
13 楼 zui4yi1 2012-12-25 12:14
if(i!=我){} 写道
zui4yi1 写道
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。

前期?前期不叫优化,叫调整——主要是架构和技术实现方式上的调整。前期就谈“优化”,个人觉得不可思议!!!!

优化的范围很广啊,一个循环体,一个方法,一个类,等等,不一定要上升到架构和技术实现方式。
12 楼 zui4yi1 2012-12-25 12:10
lyh20081984 写道
if(i!=我){} 写道
zui4yi1 写道
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。

前期?前期不叫优化,叫调整——主要是架构和技术实现方式上的调整。前期就谈“优化”,个人觉得不可思议!!!!


这话我不太赞同,虽说前期也可以进行优化,但这不是必须要这样选择,如果在前期的开发过程中,看出了相关的问题,那么也不要急于去做出修改,理由如下:
1. 你对所发现的问题所做出的修改策略不一定是最好的,在这种情况之下急忙做出修改反而不好,在后期或者项目完成之后,你才能真正知道原问题的最佳修改方法。
2. 发现问题不仅仅是解决问题这么简单,知道怎么解决,如何更好的解决才是关键。
3. 发现问题我们可以记录问题,以后面的程序开发中要注意这个问题,进行改进,前期的问题待项目完成之后再做最终解决方案


我的理解大概是这样,经验是积累起来的,并且我强调的是不忙的时候。
1. 咱们不能过分依赖后期,你怎么知道你后期的方案一定是最优方案?你能确定有那么多时间去考虑最好的方案?你能确定后期中你的方案不是脑海中一闪而过的想法?
2. 如何解决当然是关键,但肚子里得有墨水,经验是积累起来的。
3. 这个还是太依赖后期,待项目完成后,如果问题太多,再做最终方案,会不会相当于重新开发了?
11 楼 lyh20081984 2012-12-25 10:07
if(i!=我){} 写道
zui4yi1 写道
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。

前期?前期不叫优化,叫调整——主要是架构和技术实现方式上的调整。前期就谈“优化”,个人觉得不可思议!!!!


这话我不太赞同,虽说前期也可以进行优化,但这不是必须要这样选择,如果在前期的开发过程中,看出了相关的问题,那么也不要急于去做出修改,理由如下:
1. 你对所发现的问题所做出的修改策略不一定是最好的,在这种情况之下急忙做出修改反而不好,在后期或者项目完成之后,你才能真正知道原问题的最佳修改方法。
2. 发现问题不仅仅是解决问题这么简单,知道怎么解决,如何更好的解决才是关键。
3. 发现问题我们可以记录问题,以后面的程序开发中要注意这个问题,进行改进,前期的问题待项目完成之后再做最终解决方案
10 楼 if(i!=我){} 2012-12-25 09:04
zui4yi1 写道
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。

前期?前期不叫优化,叫调整——主要是架构和技术实现方式上的调整。前期就谈“优化”,个人觉得不可思议!!!!
9 楼 rainsilence 2012-12-24 17:14
zui4yi1 写道
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。

me too。。
8 楼 zui4yi1 2012-12-24 16:00
不太同意本文的观点。
前期,如果代码不复杂,又不忙,那样的话,我觉得建议并且有必要优化下

为啥?优化,本身就是种技术活,给简单的东西做优化,至少能给自己积累经验,提高自身的分析和修改能力,可为后期复杂的优化做点基础。所谓“优雅编程”的习惯,基本上就是靠这样平时的积累培养起来的。

别小看前期优化,为啥现在很多代码很臭?
大部分原因,无外乎就是前期没有做优化。待到后期,别说你有精力或兴致去优化这些东西,就算有了,你能确保你的优化达到心目中的效果了?

当然,还是强调那句话,前期,代码不复杂,又不忙的情况下,云云。
7 楼 netkiller.github.com 2012-12-24 11:18
为什么会优化,为什么要优化?写程序的时候没有考虑性能吗?

6 楼 clark911 2012-12-24 10:39
让正确的程序更快,要比让快速的程序正确容易得多
tlde_ti 写道
把代码优化改成 性能优化更准确.

同意

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • python实现按任意键继续执行程序

    本文给大家分享的是如何使用Python脚本实现按任意键继续执行程序的代码,非常的简单实用,有需要的小伙伴可以参考下

  • win php配置与安装目录,php windows环境安装的方法详解

    php windows环境安装的方法:首先下载好PHP,并将下载的PHP压缩包解压到指定的安装目录;然后打开“php.ini”,并修改配置信息;接着修改Apache配置文件;最后加载PHP模块并重启Apache服务即可。Windows系统下PHP环境搭建1、PHP环境搭建的前提是 Apache HTTP Server (Apache 服务器)已经安装部署成功,并可以正常访问到服务器的主页面。Apa...

  • 【转】代码优化是把双刃剑

    代码优化的好处多多,但是这并不意味着所有的代码都需要进行优化,有时过度的优化反而适得其反——费时、费力、不讨好。“现代计算机科学的鼻祖”Donald Knuth曾说过“过早的优化是万恶之源”,因为:让正确的程序更...

  • 代码优化其实是一把双刃剑!

    为何优化并不总是一个好主意?优化是对已经开始工作的单元进行改进的过程。对于终端用户或客户来说,这就像是樱桃一样诱人。出于同样的原因,代码优化在软件行业非常流行。但是优化代码真的总是有益的吗...

  • RICK COOK: 细数代码优化的原则(代码优化是双刃剑)

    的这篇文章,讲解了代码优化是一柄双刃剑,解释了代码优化不能依赖直觉、不能过早优化、只优化关键部分、只优化该优化的部分等。 快,关注Linuxer公众号,一起涨姿势~ Don’t Cut Yourself: ...

  • 55. 精读《async await 是把双刃剑》

    本周精读内容是《async/await 是把双刃剑》。1 引言终于,async/await 也被吐槽了。Aditya Agarwal 认为 async/await 语法...

  • 精读《async/await 是把双刃剑》

    本周精读内容是 《逃离 async/await 地狱...其实,笔者也早就觉得哪儿不对劲了,终于有个人把实话说了出来,async/await 可能会带来麻烦。 2 概述 下面是随处可见的现代化前端代码: (async () => { const ...

  • Go语言 goroutine是一把双刃剑

    go中的goroutine是go语言在语言级别支持并发的一种特性。初接触go的时候对go的goroutine的...goroutine是一把双面刃。这里列举一下goroutine使用的几宗罪: 1 goroutine的指针传递是不安全的 1 2

  • 精读《async/await 是把双刃剑》 存在的问题和解决方法

    原文链接: 精读《async/await 是把双刃剑》 存在的问题和解决方法 ...

  • 想用好低代码这把“双刃剑”,先搞清楚这三个问题|低代码系列(四)

    第三个问题 用不用这把“剑”要先看定位,应各取所需 企业最终的目的是盈利,低代码作为刚刚起步不久的服务,并不是适合所有企业。它有优点,也有缺点。放在不同的公司里,它的价值也有高有低。究竟该不该拥抱低...

  • 九大最新热门IT技术 把把都是双刃剑

    你应当把这些技术看成给人安全而不是让人扫兴的技术。要积极地调查研究虚拟化、企业搜索和智能电话等新兴技术。你不能因为下面这些问题而保持现状、不敢采用这些新技术。要有所准备,然后一往无前。 一、智能电话...

  • Java双刃剑之Unsafe类详解

    2、内存屏障 在介绍内存屏障前,需要知道编译器和CPU会在保证程序输出结果一致的情况下,会对代码进行重排序,从指令优化角度提升性能。而指令重排序可能会带来一个不好的结果,导致CPU的高速缓存和内存中数据的不...

  • C#中的两把双刃剑:抽象类和接口

    问题出现: 我们在使用C#的抽象类和接口的时候,往往会遇到以下类似的问题,...怎样将它和Struct,类紧密的结合,达到最终的双刃剑作用? 解决方案: 这也是我在学习抽象类和接口的时候遇到的问题,从我归纳的...

  • 互联网是双刃剑 需合理把握

    把整个互联网世界的体系和现实生活,我们生态体系有很多相似的地方,我们想把这两个系统更有机的结合,把生态系统更优化的东西引入到互联网上。 我们出现的这个系统,这两个系统有很大相似性,既不是非常混乱的状态...

  • mongdo 减少访问量_双刃剑MongoDB的学习和避坑

    双刃剑MongoDB的学习和避坑MongoDB 是一把双刃剑,它对数据结构的要求并不高。数据通过key-value的形式存储,而value的值可以是字符串,也可以是文档。所以我们在使用的过程中非常方便。正是这种方便给我们埋下了一...

  • 在 Windows 的右键菜单中增加选项

    (原创文章,未经作者许可,不得擅自删除本声明或更改文章内容,转载请注明出处。)在FreeBSD、Linux等操作系统的X环境下,有一项功能大家一定非常熟悉,就是在文件浏览器中能通过点击右键,在弹出的菜单中随时打开命令行终端,然后输入命令进行一系列需要的操作。通过更改注册表,我们同样可以在Windows中实现这一功能,同时还能将许多便捷的操作也放到右键菜单中,以下是我的系统中增加的三个命令:“在

  • 基于正则表达式的批量文件重命名软件NameIt

    请在这里下载 NameIt.exe Microsoft在VS2008 sp1及后续版本中正式引入头文件,以支持C++ TR1Regular Expressions。现在使用C++编写操作文本或者字符串的程序将更加方便和高效。为了学习正则表达式的使用,我编写了这一文件重命名软件NameIt,如图1所示。一来可以在windows下方便的对多个文件进行重名命,二来可以将这一程序当作正则表达式的

  • MySQL安装指南(Windows平台)

    (原创文章,未经作者许可,不得擅自删除本声明或更改文章内容,转载请注明出处。)1. 默认安装为C:/mysql,包含mysql和test两个数据库,更改目录可以用如下形式的命令:Driver:/NewDir/mysql/bin/mysqld --basedir Driver:/NewDir/mysql2. 以服务的方式安装和运行mysql,使用如下命令:(1) 安装:C:/mysq

  • emacs与VC环境变量

    (原创文章,未经作者许可,不得擅自删除本声明或更改文章内容,转载请注明出处。)相信很多朋友都喜欢在emacs里写程序,但是对于windows用户来说,常常会碰到一个恼人的问题,就是如何在emacs里调用VC的编译器来编译程序,将就的办法就是用 M-x shell 打开一个shell,然后在shell里运行VC安装目录下的VCVARS32.dat来注册环境变量,这样每一次打开shell都要注册一

Global site tag (gtag.js) - Google Analytics