计划和发愿

Published on:
Tag: wish
  • 每天扫一次地,每周拖一次地。家就是净土,把家打扫干净了,就是扫除心灵中的一些污垢
日期 打扫
2014年11月19日 Yes |
  • 修持八正道
  • 让心安住在当下
  • 放慢做事的速度
  • 平常多念“嗡嘛呢贝咪哞”净化自心,三个月内要念10万遍

为什么学佛

Published on:
Tag: buddha

为什么学习佛法

  • 断除烦恼,增长智慧。
  • 自利利他。
  • 身心自由,得大自在。
  • 修福修慧,解决人生的问题,心灵的问题,社会的问题。

学习佛法之后要知道

  • 要好好的孝顺父母。
  • 知道了因果。所以要修一切善法,断一切恶念。
  • 要忍辱,善待周围的人。
  • 尊重他人,他人都是未来佛。
  • 利益他人就是利益自己。
  • 要除掉自己的贪嗔痴。

古今圣贤和科学人士对教的评价

  1. 康有为 “佛学之博大精深,虽有圣哲无所措手”。
  2. 梁启超 “佛学广矣,大矣,深矣,微矣,切于人事,证于实用,实天地间最高尚圆满,深地著名之学说也。佛教之信仰,乃智信而非迷信”。
  3. 谭嗣同 “佛教大矣,孔次大,耶为小”。
  4. 孙中山 “佛学乃哲学之母,研究佛学,可补科学之偏”。
  5. 章太炎 “佛教的理论,使上智人不能不信”。
  6. 鲁迅 “释迦牟尼真是大哲,我平常对人生有许多难以解答的问题,他居然早已明白的启示了”。
  7. 早期马克思哲学宣传者 李石岑 我认为佛学的提倡,不特于对科学毫无抵触,而且能使科学的方法上加一层深密,科学的分类上加一层正确,科学的效果上加一层保证。
  8. 陈独秀 “佛法之广大精深,余所素信不疑者也”
  9. 沈家祯博士 我本人是科学家,但对佛法同样感兴趣。我认为佛法与科学是一而二,二而一的。佛教的《般若经》、《入胎经》、《楞严经》等经论对大到宇宙自然,小到人体本身的生老病死都进行了客观辩证的阐释,且越来越得到了近代和现代科学的证明,而佛教高僧的虹化现象,也只有用爱因斯坦的相对论来加以解释。
  10. 中国现代科学家 尤智表 博士 佛教不但不是迷信,而且是破除迷信最彻底的学理,科学造诣深者,愈能解释佛经中素心的真义。

  11. 马克思 辩证法在佛教中已达到很精细的程度。

  12. 恩格斯 佛教徒处在理性思维的高级阶段。人类到释迦牟尼佛时代,辩证思维才成熟。辩证法最初来源于佛教。
  13. 尼采 佛教是历史上唯一真正注重和依据实证的宗教。
  14. 英国著名哲学家 伯特兰?罗素 “我并不觉得基督在智慧或德行上比其他一些有名望的人要高,我想,我会把佛陀的位置摆在基督的前面。多种宗教中,我所赞成的是佛教。历史上所有宗教中,我对佛教最具好感,尤其是它初级的形式,含有最少压迫性的因素”。“我觉得不论智慧或人格,佛陀都远远超过其他宗教创始人”。
  15. 爱因斯坦 “单靠知识和技巧,不能使人类走上幸福和高尚的生活。人类有充分的理由,把那些崇高的道德标准和道德价值的传播者,置于客观真理的发现之上。对我来说,人类应该感谢释迦牟尼佛和耶稣那样的人物,远比应该感谢所有创造性的好奇的头脑的成就要多得多。” “在我们这个唯物论的年代,只有严肃的科学工作者,才是深信宗教的人”。 “如果有一个能够应付现代科学需求,又能与科学相依共存的宗教,那必定是佛教”。 “佛学是一切真正科学的原动力”。爱因斯坦所写自传的谈论中谈到,他不是一名宗教徒,但如果他是的话,他愿成为一名佛教徒。爱因斯坦还说:“未来的宗教是一种宇宙宗教。它将是一种超越人格化神,远离一切教条和神学的宗教。这种宗教,包容自然和精神两个方面,作为一个有意义的统一体,必定是建立在由对事物的——无论是精神,还是自然的——实践与体验而产生的宗教观念之上的。佛教符合这种特征”。(出自1954年普林斯顿大学出版社出版的《Albert Einstein: The Human Side》一书)。 爱因斯坦还说:“没有科学的宗教是瘸子,没有宗教的科学是瞎子”。 “空间、时间和物质,是人类认识的错觉”。 爱因斯坦表示他很欣赏佛教,他曾说道:“佛教具有未来世界宗教可能期待的特点:它超越了一个人格化的神,避免了教条和神学,它包涵物质和精神两方面,同时它作为有机的整体植根于对自然和精神世界所有事物的经验,以此为宗教信仰的灵感。”
  16. 埃德温?阿若德 “我常说,而且将一直这么说,在佛教与科学之间存在着一股智慧的粘合力”。 “我说过,我还要说,我还要一遍又一遍的说,佛教与现代科学之间存在着一条紧密的智力纽带。”
  17. 克里斯特姆斯?汉普里斯: “佛教是一种思想体系,一种宗教,一种精神科学,一种生活方式。它合理、现实,包容一切,2500年来,它满足了世界上近三分之一的精神需要,它深深地被西方世界所吸引,它在坚持“依靠自力”的同时,采取对其他观点的宽容态度,它包容了科学、宗教、哲学、心理学、伦理和艺术,它指出:人是他自己现实生活的创造者和他自己命运的唯一设计者”。
  18. 艾基尔顿?巴普铁斯特《超然的佛教科学》 “在面对原子方面,科学不能给人以确切的保证,而佛教完全可以应付原子的挑战,这是因为佛教超凡的智慧始于科学所不能应对和解决的地方。这对从事佛学研究的人来说是显而易见的。因为,通过佛教的禅定,原子的成分构成物质的过程,便可如实看到或觉察到。而物质的生与灭所引起的忧伤与痛苦均源于所谓的“灵魂”或“梵我”等法执之妄见,这便是佛经里所阐述的”。
  19. 世界著名学者巴格尔 在世界宗教中,只有佛教是切实地以系统理性的分析来考察生活中的问题,并寻找解决问题的方法。
  20. 世界几何学之父 威勒 博士曾说 假使没有佛教因果律,宇宙就只有混乱。 23.美国心理学家文巴克 博士 通过特殊的催眠方法约有百分之七十的人,可鲜明地回忆前世(这就是佛教称的前世)记忆,甚至有的可追忆到自己前九世的境况。
  21. 著名物理学家威斯柯夫 认为: “在科学上,几乎每件事都是超过你直接经验的。世间人往往仅以自已的见闻和经验来评判事物,但他不知道,我们的感觉和经验经常在欺骗自已”(此与佛教类同)。 (佛教是伟大而科学的教育,早在二千五百年前,佛教就以其非凡超卓的思想唤醒人类,使人类从一切缠缚和迷执中解脱出来。佛陀曾告诫弟子们应该去培养和发展自身的潜能,不要做他人的奴隶,要充分利用自己的意志和智慧找到那永恒的真理。这种永恒的真理,正是佛陀向人类所宣说的,是靠他自己的实践亲证达到的。佛的言教不带有任何宗教色彩,任何人均可对它进行实践。)
  22. 出家人是最高尚最伟大的,顺治皇帝曾作”黄金白玉非为贵,唯有袈裟披肩难”之赞誉。        ——-著名书画曲剧家 李叔同

  23. 王永庆的外孙女哈佛才女:杨元宁20岁的慈悲之心http://www.folou.com/thread-278114-1-1.html

Java 风格指南

Published on:

[TOC]

Java Programming Guide

软件首要的技术革命是管理复杂度

Steve McConnel Code Complete

代码越多,问题也就越多

Biggie Smalls

代码被阅读的次数远远多于写的次数 任何一个傻瓜都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码

编码规范的目的是在团队中达成一种共识,从而编写出易于阅读和维护的代码。值得庆幸的是Java中有现成的规范和代码风格工具,以及风格检查工具。

通用命名规范

  • 包命名规范

    包名统一用小写 mypackage, cn.ritu.cn

  • 类型名用大小写混合的方式,第一个字母大写. UserInfo
  • 变量名也用大小写混合的方式,第一个字母小写 lineCount
  • 常量全部大写,多个单词之间用_下划线隔开

    常量是指那些它的内容一直不会改变的量,而不只是声明为final就可以了,如

1
2
3
4
5
6
7
 static final int MIN_TIMES = 30;
 static final ImmutableList< String > NAMES = ImmutableList.of("Ed");
 //下面的不是常量
 final String nonStatic = "non-static";
 static String nonFinal = "non-final";
 static final Set< String > mutableCollection = new HashSet< String >();
 static final ImmutableSet< SomeMutableType > mutableElements = ImmutableSet.of(mutable);

  • 方法名用动名词结合的方式,第一个字母小写,大小写混合的方式。不要出现模糊不清的命名情况,如search();
1
2
getName();
vertex.findNearestVertex();
  • 在名字中如果有缩写也要使用大小写混合的方式
1
2
 exportHtmlSource(); //而不是exportHTMLSource();
 openDvdPlayer(); //而不是openDvdPlayer();

  • 类中的私有变量要单独用一种方式来表示,在名字后面用_下划线,或者用m_开头,有待讨论。 如:
1
2
3
4
 class Person
 {
  private String name_;
 }

  • 通用的常量的名字应该和它的类型保持一致
1
2
3
4
5
6
7
8
 void setTopic(Topic topic) // NOT: void setTopic(Topic value)
                            // NOT: void setTopic(Topic aTopic)
                            // NOT: void setTopic(Topic t)

 void connect(Database database) // NOT: void connect(Database db)
                                 // NOT: void connect(Database oracleDB)
// 更具体一点,可以用角色加类型组合的方式来表达
 Point startingPoint, centerPoint

  • 作用域大的变量必须使用具体的长名字来表示,很小范围的可以用缩写如循环中的循环变量i,j,k 如果是多层嵌套则要考虑使用更具体的名字来命名循环变量,如bookIndex
  • 尽量给临时变量起一个更好的名字,不要用temp。
  • 不要把对象的名字或类的名字包含在方法名中
1
 line.getLength(); //NOT:line.getLineLength();

特定的命名规范

  • get/set 用于访问成员的属性
  • is前缀的用于布尔变量和返回布尔的方法,有时用has和can前缀更加合适
1
2
3
 isSet, isVisible, isFinished, isFound, isOpen
 void setFound(boolean isFound);
 boolean hasLicense();

  • compute可以被用于那些表示计算的方法
1
 valueSet.computeAverage();

  • find用于查找的方法
1
2
3
vertex.findNearestVertex();
matrix.findSmallestElement();
node.findShortestPath(Node destinationNode);
  • initialize 术语用在对象初始化的时候,不要使用init

    printer.initializeFontSet();

  • GUI控件的命名应该包含控件的类型

    widthScale, nameTexField, leftScrollbar

  • 复数用于表示集合对象
1
2
Collection< Point > points;
int[] values;
  • n前缀可以用于表示若干个对象,这种情况下num不应该被使用

    nPoints, nLines

  • No或者total后缀表示对象的总数,而且仅仅使用其中一种方式来表示,不要同时使用
  • Min, Total, Sum, MaxAverage 这些表示数量,总量,平均值,最大值,总额的限定词统一作为后缀 不要出现前后都有的情况,revenueTotal和totalRevenue这会产生迷惑

    revenueTotal(总收入),expanseTotal(总支出)

  • 使用对仗词语来命名,如果出现了其中一个,通常情况下也要有另外一个。常见的对仗词有

    get/set, add/remove, create/destroy, start/stop, insert/delete, increment/decrement, old/new, begin/end, first/last, up/down, min/max, next/previous, old/new, open/close, show/hide, suspend/resume, etc.

  • 不要使用缩写,除了那些领域中的专业词汇。如:html, cpu

    下列的缩写是不可取的: cmd 代替 command comp 代替 compute,compare cp 代替 copy init 代替 initialize

  • 不要使用否定的布尔变量

    bool isError; // NOT: isNoError bool isFound; // NOT: isNotFound

  • 常量要加上类型的前缀
1
2
3
4
5
6
7
8
9
10
final int  COLOR\_RED   = 1;
final int  COLOR\_GREEN = 2;
final int  COLOR\_BLUE  = 3;
//或者使用
interface Color
{
 final int RED   = 1;
 final int GREEN = 2;
 final int BLUE  = 3;
}
  • 异常类后缀应该加上Exception
  • 接口的默认实现应该加上前缀Default
  • Singleton 单例类通过getInstance方法来获取单例
  • 工厂类创建对象使用new[类名]的方法来创建
1
2
3
4
5
class PointFactory
{
  public Point newPoint()
  {...}
}
  • 函数在名称中应该包含它要返回的类型信息,过程的名称则应该具体的描述它做了什么

文件规范

  • Java文件名首字母大写如Point.java
  • 每个类单独为一个文件,并且和文件名一样。私有的类可以声明为内部的嵌套类
  • 每一行的长度应该控制在80列以内
  • 统一使用2个空格作用缩进,TAB要转换为缩进
  • 未完成的行应该明显的表示出来。
1
2
3
4
5
6
7
8
9
totalSum = a + b + c +
         d + e;
method(param1, param2,
     param3);
for (int tableNo = 0; tableNo < nTables;
   tableNo += tableStep)
/*
* 在逗号,分号和操作符等断开,然后下一行的开始与上一行表达式的开始平行
*/

语句

package和import语句

  • package语句必须在文件的第一句,import语句跟在package语句的后面。 按照功能进行分组,每个组之间用空行分开。按照字典顺序进行排序。
1
2
3
4
5
6
7
8
9
10
import java.io.IOException;
import java.net.URL;

import java.rmi.RmiServer;
import java.rmi.server.Server;

import javax.swing.JPanel;
import javax.swing.event.ActionEvent;

import org.linux.apache.server.SoapServer;

  • 引入的类要列出来,不要使用整个包引入的方式java.util.* 来引入整个包;

    类和接口

  • 类和接口的声明顺序
    1. 类和接口的文档说明
    2. 类和接口的语句 class 或者 interface
    3. 类和接口的变量(包括静态变量)按照public, protected, package,private的顺序列出
    4. 构造函数
    5. 方法

      方法

  • 方法修饰符的顺序

    访问权限( public, protected, private ) static abstract synchronized final native的顺序

  • 类型转换

    类型

  • 类型转换必须强制声明,强制转换的前后要留空格 int length = (int) getLength();
  • 数组的声明[]应该紧跟着类型名 String[] names; int[] values;

    变量

  • 变量应该的定义的时候初始化,定义在最小的作用域范围内,在要使用的地方进行定义
  • 一个变量名不应该有双重含义, 如变量 x的第一位来表示某个标志位,后面的倍数来表示坐标
  • 类变量不应该被声明为pulibc,除非这个类是作为结构体使用
  • 变量的生命周期应该保持最短,资源用完应该及时释放

    循环

  • 只有循环控制语句应该被放在for()结构中
1
2
3
4
5
sum = 0;
for (i = 0; i < 100; i++)
  sum += value[i];
  sum += value[i];
// NOT: for (i = 0, sum = 0; i < 100; i++)
  • 循环变量应该紧挨着循环结构
1
2
3
4
5
isDone = false;           // NOT: bool isDone = false;
while (!isDone) {         //      :
  :                       //      while (!isDone) {
}                         //        :
                          //      }
  • 在循环中避免使用do-while语句
  • 在循环中尽量避免使用continue和break语句

条件

  • 避免复杂的条件判断语句,可以引用临时的布尔变量来降低复杂度
  • 正常情况应该被放在if语句中,异常情况放在else语句中
1
2
3
4
5
6
if (isOK) {
  doSomething();
}
else {
  exception();
}
  • 条件语句应该写在单独一行,后面不要接其它的语句了
  • 不要在判断中去执行语句
1
2
3
4
5
6
7
8
9
InputStream stream = File.open(fileName, "w");
if (stream != null) {
  :
}

// NOT:
if (File.open(fileName, "w") != null)) {
  :
}
  • 不要使用魔数,使用具名常量代替
  • 浮点数的书写至少要有一个小数位
  • 静态方法要使用类名来调用,不要使用对象。
1
 Thread.sleep(1000); //NOT: thread.sleep(1000); getThread().sleep(1000);

布局和注释

布局

  • 缩进为两个空格,TAB符要设置转换为空格
  • 块布局可以是下面的两种
1
2
3
4
5
6
7
8
9
10
 while (!done) {
   doSomething();
   done = moreToDo();
 }

 while (!done)
 {
   doSomething();
   done = moreToDo();
 }

  • 类的布局如下
1
2
3
4
5
 class Rectangle extends Shape
   implements Cloneable, Serializable
 {
   ...
 }

  • 方法的布局如下
1
2
3
4
5
 public void someMethod()
   throws SomeException
 {
   ...
 }

  • 条件语句的布局如下,判断条件要另起一行不要跟}在一行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 if (condition) {
   statements;
 }

 if (condition) {
   statements;
 }
 else {
    statements;
 }

 if (condition) {
   statements;
 }
 else if (condition) {
   statements;
 }
 else {
   statements;
 }

  • for语句和while语句的布局如下
1
2
3
4
5
6
 for (initialization; condition; update) {
   statements;
 }
 空循环如下:
 for (initialization; condition; update)
 ;

  • switch语句的布局如下,switch语句一定要有default:即使是空的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 switch (condition) {
   case ABC :
     statements;
     // Fallthrough

   case DEF :
     statements;
     break;

   case XYZ :
     statements;
     break;

   default :
     statements;
     break;
 }

  • try-catch语句布局如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 try {
   statements;
 }
 catch (Exception exception) {
   statements;
 }

 try {
   statements;
 }
 catch (Exception exception) {
   statements;
 }
 finally {
   statements;
 }

空格

  • 操作符两边要有空格
  • Java保留字后面要跟空格 如 while () , if ()
  • 逗号后面要有空格
  • 冒号两边都要有空格
  • 在for语句中的分号后面要有空格
1
2
3
4
5
6
7
8
9
10
11
 a = (b + c) * d; // NOT: a=(b+c)*d

 while (true) {   // NOT: while(true){
   ...

 doSomething(a, b, c, d);  // NOT: doSomething(a,b,c,d);

 case 100 :  // NOT: case 100:

 for (i = 0; i < 10; i++) {  // NOT: for(i=0;i<10;i++){
   ...

  • 逻辑单元之间要隔一行空行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 // Create a new identity matrix
 Matrix4x4 matrix = new Matrix4x4();

 // Precompute angles for efficiency
 double cosAngle = Math.cos(angle);
 double sinAngle = Math.sin(angle);

 // Specify matrix as a rotation transformation
 matrix.setElement(1, 1,  cosAngle);
 matrix.setElement(1, 2,  sinAngle);
 matrix.setElement(2, 1, -sinAngle);
 matrix.setElement(2, 2,  cosAngle);

 // Apply rotation
 transformation.multiply(matrix);

  • 类中的每个方法之间前后要有空行
  • 变量的声明要左对齐
1
2
3
 TextFile  file;
 int       nPoints;
 double    x, y;

  • 语句之间也要对齐
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 if      (a == lowValue)    compueSomething();
 else if (a == mediumValue) computeSomethingElse();
 else if (a == highValue)   computeSomethingElseYet();

 value = (potential        * oilDensity)   / constant1 +
         (depth            * waterDensity) / constant2 +
         (zCoordinateValue * gasDensity)   / constant3;

 minPosition     = computeDistance(min,     x, y, z);
 averagePosition = computeDistance(average, x, y, z);

 switch (phase) {
   case PHASE_OIL   : text = "Oil";   break;
   case PHASE_WATER : text = "Water"; break;
   case PHASE_GAS   : text = "Gas";   break;
 }

注释

  • 代码应该能够自我解释。复杂的代码要考虑重写
  • Javadoc的注释使用下面的格式,可以通过工具生成,块注释每行的开头要有*号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * Return lateral location of the specified position.
 * If the position is unset, NaN is returned.
 *
 * @param x    X coordinate of position.
 * @param y    Y coordinate of position.
 * @param zone Zone of position.
 * @return     Lateral location.
 * @throws IllegalArgumentException  If zone is <= 0.
 */
public double computeLocation(double x, double y, int zone)
  throws IllegalArgumentException
{
  ...
}

  • 在注释后面要有空格,注释要跟着代码缩进
1
2
3
4
5
6
7
8
9
10
11
// This is a comment    NOT: //This is a comment

/**                     NOT: /**
 * This is a javadoc          *This is a javadoc
 * comment                    *comment
 */                           */

while (true) {       // NOT:  while (true) { 
  // Do something             // Do something
  something();                  something();
}

  • 所有公开的类和接口应该使用Javadoc的注释规范

References

[1] Code Complete, Steve McConnel – Microsoft Press

[2] Java Code Conventions http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

[3] Netscape’s Software Coding Standards for Java http://developer.netscape.com/docs/technote/java/codestyle.html

[4] C / C++ / Java Coding Standards from NASA http://v2ma09.gsfc.nasa.gov/coding_standards.html

[5] Coding Standards for Java from AmbySoft http://www.ambysoft.com/javaCodingStandards.html

变量命名概要

Published on:

变量命名

命名的一般注意事项

  • 名字是否完整的表达了变量所代表的含义
  • 名字是否足够长,让人一看就懂
  • 名字反映了现实世界中的问题,而不是编程语言中的解决方案
  • 如果有计算值限定符,它们是否被放在了后面 employCount employTotal
  • 是否使用Count和Index来代替Num

为特定的数据类型命名

  • 循环下标的命名有意义吗?(如果是多层嵌套要注意下标的命名)
  • 所有的临时变量都重新命名以更有意义
  • 当布尔变量为真时,变量名能准确表达其意义
  • 枚举类型的命名是否使用了前缀Color_Red Color_Blue
  • 具名常量根据其代表的实体,而不是它所代表的数字来命名

命名规则

  • 规则能够区分全局数据,类数据,和局部数据吗?
  • 规则能够区分类型名,具名常量,枚举类型和变量名吗? 如类型名用大小写混合,具名常量用全部大写
  • 规则能够区分子程序的输入和输出参数吗?
  • 规则尽可能的与语言规则标准兼容吗?

短名字

  • 除非有必要才用短名字
  • 是否避免了为了节省一个字而缩写的情况
  • 所有单词的缩写方式都一致吗
  • 名字能够读出来吗
  • 避免容易看错和读错的名字了吗? 如i 1 l, o 0 O等
  • 在缩写表里有对缩写进行说明吗

常见的命名问题

  • 容易让人误解的名字
  • 有相近含义的名字
  • 只有一两个字符不同的名字
  • 发音相近的名字
  • 包含数字的名字
  • 英语中经常拼错的名字
  • 与标准的子程序或预定义的变量名冲突的名字
  • 过于随意的名字
  • 含有难读字符的名字

要点

  • 名字要尽可能的具体。那些模糊的或者太通用的可以包含多种用途的名字通常都不是很好
  • 现代编程语言很少需要用到缩写
  • 代码阅读的次数要远多于编写的次数
  • 命名规则应该能够很好的区分全局数据,局部数据,类数据。它们还应该区分类型名,具名常量,枚举类型和变量名

LNK2001: Unresolved External Symbol __imp__GetTickCount64@0

Published on:
Tag: compile

这个链接错误的发生在链接MSVCRT.lib时,原因是链接了的错误版本kernel32.lib等库。修改link条件,把/LIBPATH:“libpath”这个改为正确的path就可以了。如果自己写makefile文件,在使用编译器,链接器,头文件,和库时,要特别小心。如果使用了第三方的库要看这个第三方的库是用什么版本的CRT(运行时库)编译的,是多线程版的还是单线程版的,用Unicode的还是ASCII的。

LINK : fatal error LNK1101: incorrect MSPDB80.DLL version; 这个错误是在使用cl.exe命令行编译时出现的错误,原因是VC\Bin\下没有“msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe”这四个文件。 解决的方法:

  • 直接从Common7\IDE\下复制这四个文件到VC\Bin\下即可解决
  • 添加系统变量(Path),这样:我的电脑->属性->高级->环境变量->系统变量,在path中添加C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;,注意结尾最后用“;”隔开!

附注:

RUN-TIME LIBRARYRun-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。 我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。

C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。 C Run-Time Libraries有静态库版本,也有动态链接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。

动态链接库版本:/MD Multithreaded DLL 使用导入库MSVCRT.LIB

/MDd Debug Multithreaded DLL 使用导入库MSVCRTD.LIB

静态库版本:/ML Single-Threaded 使用静态库LIBC.LIB

/MLd Debug Single-Threaded 使用静态库LIBCD.LIB

/MT Multithreaded 使用静态库LIBCMT.LIB

/MTd Debug Multithreaded 使用静态库LIBCMTD.LIB

若要使用其中的一个运行时库 请忽略其他库:

  • libc.lib 单线程 libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
  • libcmt.lib 多线程 libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
  • msvcrt.lib 使用多线程 DLL libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
  • libcd.lib 单线程调试 libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
  • libcmtd.lib 多线程调试 libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
  • msvcrtd.lib 使用多线程调试 DLL libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib

设置方法:属性,链接器,输入,忽略指定库 libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib (使用一个,忽略其他的)

[1] 引用http://www.hz601.org/heaven/