CodeLite的安装配置

  CodeLite是一个强大的开源,跨平台的C/C++整合开发环境. 支持包括Windows、Linux 和Mac 系统下运行。换CodeLite也是一时心血来潮,呵呵!暂时换个IDE,就像家里面换了1扇窗户,有了一种新鲜感。这样继续学习编程会多增添1点乐趣,有更多的乐趣在前进的道路上才不会那么的孤单!

  CodeLite其实和VC6.0很相似的。功能,甚至快捷键都一样,所以适应会很快的。只是CodeLite我用的g++编译器,以前VC6.0的是cl编译器。调试器嘛!CodeLite我用的是GDB,VC6.0的调试器我就不知道是什么了,没发现有单独的调试器程序存在,应该是做在一起了吧,就像八宝粥,米啊!坚果啊!都混在一起了。

  CodeLite的下载http://www.codelite.org/ 到这个地址去下载就好了,最好选择整合版的,就是CodeLite和MinGW捆绑在一起的那个文件,这样你就不必单独去下载了啊。那个整合版的好像是24M。

  CodeLite的安装与配置:安装就很简单了,直接下一步下一步就可以了。只是在安装结束后记得设置下debugger:Settings > Debugger Settings > Loaded Debugger > Debugger Path。将Path设置为:X:\MinGW\gdb\bin\gdb.exe 这样设置好了后,就可以开始使用啦!

  CodeLite编写调试运行helloworld:Workspace > New project > 然后选择代码类型与工程名和保存路径以及编译器选择(如图):

然后OK后,就出现了代码编辑主窗口啦!

 呵呵!还不错吧!样子挺酷的!不过我们既然要调试就多写点代码吧!

很酷吧!其实和VC6.0一样了的!非常容易上手啦!你看那个i的值,0x开头的,呵呵!安装配置和简单调试就到这里了,不过有个很严重的问题也,这个是C++程序吗,怎么和C一样的啊!是啊!哦,原来是C++兼容C,所以你写标准C,编译运行调试都是没有问题的,那么什么时候开始真正C++的征途啊,马上就开始啦!

第一个C++的阅读

  啊!直接就读C++了啊!一直就读,是不是太快了点呢,不会的,因为我之前学过C了啊,C++是C语言发展起来的,虽然它们之间没有什么关系,但是C++是兼容C的,所以直接读C++程序应该没什么问题了!下面开始读了:

//试着阅读此段程序,尽量读懂程序的功能

#include <iostream>
#include <istream>
#include <limits>
#include <ostream>

int main()
{
	int min(std::numeric_limits<int>::max());
	int max(std::numeric_limits<int>::min());
	
	bool any(false);
	
	int x;
	
	while(std::cin >> x)
	{
		any = true;
		
		if(x < min)
		{
			min = x;
		}
		
		if(x > max)
		{
			max = x;
		}
		
	}
	
	if(any)
	{
		std::cout << "min =" << min << "\nmax =" << max << '\n';
	}
	return 0;
}
	
 

这个程序的功能是什么呢?!稍微读下了后,因为有C基础嘛!不是很困难的就得到了,这段程序就是从标准输入设备读取一系列的整数,然后记录其最大和最小值,在最后打印出它们来。

代码分析:

第1行:1个的双斜杠开始了一行的注释。注意,两斜杠之间不能插入空格,因为C++编译器看到符号时,总会试图构建有可能最长的符号。注释也可以用/**/的形式注释。两种风格的注释可以相互嵌套,但是注意,同种风格的注释不能嵌套使用。如果我们把上段程序换成/**/风格的注释,然后编译,结果会和//风格的一样吗?!答案是不一定的哦!因为某些二进制格式中包含时间戳,所以某些时候两次编译生成的结果不一样。

第3-6行:复制粘帖头文件。第3行是告诉编译器,cin作为标准输入流,cout作为标准输出流。第4行是把输入操作符 >> 的定义告诉编译器。第5行是引入std::numeric_limits这个名字。第6行是引入输入操作符 << . 因为如此繁琐啊!因为编译器很笨,它不像人,人可以通过上下文来推断一些词语的意思,但是编译器就不会了,所以我们必须用#include告诉编译器一些符号或者标识符的含义以及它在一段程序中扮演的什么角色,是什么地位。比如我故意把limits写成stimil后再编译,首先,编译器无法找到stimil这个文件,编译器就会报告1条消息,然后编译器试着去编译,因为此刻编译器不知道std::numeric_limits是什么呢!因此就会报错了,而且报错可能不只一条错误,因为有的编译器会将消息级联,也就是每使用1次std::numeric_limits就会产生错误,而真正的错误就被这些级联带来的错误给包围啦!如何突出重围找到真正的错误呢,就是应当首先关注编译器爆出的前几条错误,修正后一般都能解决所有的错误。在修正错误的时候,笨笨的编译器一般是不会说使用std::numeric_limits之前需要复制粘帖<limits>头文件这样的消息。那怎么办呢,最好此刻查询报错行关键字为线索的帮助文档。级联式错误报告如图:

哈哈!G++首先就说没有找到stimits这个文件,所以我首先就想到了是不是stimits这个名字写错了,因为正确的安装了开发包啊~

第8行:大多数时候每个C++程序都有一个int main(), main之前的返回值必须是int,我之前程序写过void,这点是不规范的,之前我在C笔记中也提到过。为什么是大多数时候呢,因为main()用户态入口函数是可以自定义的。关于自定义入口函数,以后我会了我再写笔记了。

第10-13行:为了避免直接和地址打交到,所以使用了变量。声明变量首先是变量的数据类型,然后是变量的名字。变量的名字后可以加上初始值,初始值用括号包起来。这里的std::numeric_limits是属于C++标准库,可以用来查询内置算术类型的属性。这样是不是很方便啊,以前写C语言还要自己去算下,这里直接使用标准库啦!我这里是查询的int,如果我们查询另外的,比如bool的min(),结果是什么呢,呵呵!如果查询bool的二进制位:std::numeric_limits<bool>::digits呢?!这些都不难了,要知道到底有哪些属性可以去查询,那么就看帮助文档就好了呢!

第14-23行:其中std::cin是表示从标准输入读取一个整数,并把这个整数存储在X变量的地址里。只要成功输入整数,条件就为真了,如果不是成功输入整数或者不是输入的整数,就为假了,循环就终止了!17行和19行的if没有写else分支,其实最好是写上,但是这里好像也没有写的必要,所以自己看着办了呢!23行的条件只有1个名字any,呵呵,因为它是bool类型,所以这里才可以直接用啊。要是这里不是bool类型的,你写成了if(x)会是什么结果啊?!C++把任何数值类型都可以做为条件,非零为真,零为假,这样的话,也就是程序背后做了一件这样的事,它把数值和0做了是否等于的测试。

第24行:>> 这个符号是输出操作符,可以用一个地址加其解释方式的值(也就是变量的值),或者解释方式为字符串的值,或者解释方式为字符,或者表达式的值。标准库把输出操作符放在了<ostream>头文件中,所以我们要复制粘帖这个头文件,这样编译器才能知道std::out这个名字。单个字符的时候注意要用单引号把它包起来,如果我们就要输出单引号呢,我们就用反斜杠转义它。如果是一个字符串的话就用双引号把它包起来,如果字符串中包含双引号同样用反斜线转义它。

  此章节完了!我已经读懂了一个C++程序啦!然后再慢慢细节它,加油!