要让 Eclipse 可以开发 C/C++ 程式,要挂上 CDT 才可以。
首先要下载CDT
CDT的最新版本是 3.1.0,它支持eclipse3.2.0,其下载地址:http://download3.eclipse.org/tools/cdt/releases/callisto/dist/3.1.0/,或者是到http://www.eclipse.org/cdt/downloads.php下载其它版本。如果你安裝的 Eclipse 是 3.0.x 版就必須安裝 CDT 2.1.1 最新版
如果安裝的 Eclipse 是 3.1.x 版,就必須安裝 CDT 3.0 版
接下来是安裝
将解压后的features、plugins整个文件夹复制到Eclipse安裝目录中,重新启动Eclipse即可。在建立新项目的窗口里,看到已经有了 C 及 C++ 的选项,代表安裝成功了。如果看不到,呵呵,你就自己再试吧。
还要安裝MinGW——Minimalist GNU for Windows
虽已在 Eclipse上安装了CDT,但还需要一个 "编绎器" 才能编绎程式,所以要下载可在Windows环境里使用的GNU C、C++编绎器, ......
要让 Eclipse 可以开发 C/C++ 程式,要挂上 CDT 才可以。
首先要下载CDT
CDT的最新版本是 3.1.0,它支持eclipse3.2.0,其下载地址:http://download3.eclipse.org/tools/cdt/releases/callisto/dist/3.1.0/,或者是到http://www.eclipse.org/cdt/downloads.php下载其它版本。如果你安裝的 Eclipse 是 3.0.x 版就必須安裝 CDT 2.1.1 最新版
如果安裝的 Eclipse 是 3.1.x 版,就必須安裝 CDT 3.0 版
接下来是安裝
将解压后的features、plugins整个文件夹复制到Eclipse安裝目录中,重新启动Eclipse即可。在建立新项目的窗口里,看到已经有了 C 及 C++ 的选项,代表安裝成功了。如果看不到,呵呵,你就自己再试吧。
还要安裝MinGW——Minimalist GNU for Windows
虽已在 Eclipse上安装了CDT,但还需要一个 "编绎器" 才能编绎程式,所以要下载可在Windows环境里使用的GNU C、C++编绎器, ......
CAPTION: 关于C/C++中内存空间的划分
AUTHOR: aIsland 摘自中国IT实验室
DATE: 2010-05-30
E-MAIL: aIsland@live.cn
QQ: 418662213
P.S.
1.Bolanlan|随心high|aIsland 三个网名均为本人
2.声明aIsland 所收录的所有文章其著作权都属于原创作者
3.引用文章链接:http://c.chinaitlab.com/system/792799.html
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。
2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。
3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放空间。
4、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放空间。 ......
CAPTION: 关于C/C++中内存空间的划分
AUTHOR: aIsland 摘自中国IT实验室
DATE: 2010-05-30
E-MAIL: aIsland@live.cn
QQ: 418662213
P.S.
1.Bolanlan|随心high|aIsland 三个网名均为本人
2.声明aIsland 所收录的所有文章其著作权都属于原创作者
3.引用文章链接:http://c.chinaitlab.com/system/792799.html
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。
2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。
3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放空间。
4、文字常量区:常量字符串就是放在这里的。 程序结束后由系统释放空间。 ......
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/
#include <iostream>
using namespace std;
void swap(int x, int y) {
cout << "x and y swap before : " << x << "\t" << y << endl;
int i = x;
x = y;
y = i;
cout << "x and y swap after : " << x << "\t" << y << endl;
}
void swap2(int * x, int * y) {
cout << "x and y swap before : " << *x << "\t" << *y << endl;
int * i = x;
x = y;
y = i;
cout << "x and y swap after : " << *x << "\t" << *y << endl;
}
/**
* 注意,此处非&x与&y并非地址,而是对象的别名!!!
*/
void swap3(int &x, int &y) {
cout << "x and y swap before : " << x << "\t" << y << endl;
int i = x;
x = y;
y = i;
cout << "x and y swap after : " << x << "\t" << y << endl; ......
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/
#include <iostream>
using namespace std;
void swap(int x, int y) {
cout << "x and y swap before : " << x << "\t" << y << endl;
int i = x;
x = y;
y = i;
cout << "x and y swap after : " << x << "\t" << y << endl;
}
void swap2(int * x, int * y) {
cout << "x and y swap before : " << *x << "\t" << *y << endl;
int * i = x;
x = y;
y = i;
cout << "x and y swap after : " << *x << "\t" << *y << endl;
}
/**
* 注意,此处非&x与&y并非地址,而是对象的别名!!!
*/
void swap3(int &x, int &y) {
cout << "x and y swap before : " << x << "\t" << y << endl;
int i = x;
x = y;
y = i;
cout << "x and y swap after : " << x << "\t" << y << endl; ......
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/
#include <iostream>
using namespace std;
class A{
public:
A(){
cout << "执行构造函数创建一个对象" << endl;
}
A(A&){
cout << "执行拷贝函数拷贝一个对象" << endl;
}
~A(){
cout << "执行析构函数删除一个对象" << endl;
}
};
void func(A a){
cout << "调用一个传值函数" << endl;
}
void func2(A &a){
cout << "调用一个传址函数" << endl;
}
A getA(A a){
return a;
}
A getA2(A &a){
return a;
}
/**
* 同getA4
*/
A* getA3(A &a){
return &a;
}
/**
* 同getA3
*/
A* getA4(A *a){
return a;
}
/*
* 按值传递的缺点...当创建一个新的对象之后,如果按值传递
* 将复制构造函数创建对象的副本,副本在使用完成之后,又会执行析构函数删除该副本!
*/
int main(int argc, char** argv) {
A a;
func(a);
func(a);
cout << "-- ......
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/
#include <iostream>
using namespace std;
class A{
public:
A(){
cout << "执行构造函数创建一个对象" << endl;
}
A(A&){
cout << "执行拷贝函数拷贝一个对象" << endl;
}
~A(){
cout << "执行析构函数删除一个对象" << endl;
}
};
void func(A a){
cout << "调用一个传值函数" << endl;
}
void func2(A &a){
cout << "调用一个传址函数" << endl;
}
A getA(A a){
return a;
}
A getA2(A &a){
return a;
}
/**
* 同getA4
*/
A* getA3(A &a){
return &a;
}
/**
* 同getA3
*/
A* getA4(A *a){
return a;
}
/*
* 按值传递的缺点...当创建一个新的对象之后,如果按值传递
* 将复制构造函数创建对象的副本,副本在使用完成之后,又会执行析构函数删除该副本!
*/
int main(int argc, char** argv) {
A a;
func(a);
func(a);
cout << "-- ......
关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:
#define WARN_IF(EXP) \
do{ if (EXP) \
fprintf(stderr, "Warning: " #EXP "\n"); } \
while(0)
那么实际使用中会出现下面所示的替换过程:
WARN_IF (divider == 0);
被替换为
do {
if (divider == 0)
fprintf(stderr, "Warning" "divider == 0" "\n");
} while(0);
这样每次divider(除数)为0的时候便会在标准错误流上输出一个提示信息。
而##被称为连接符(concatenator),用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定是宏的变量。比如你要做一个菜单项命令名和函数指针组成的结构体的数组,并且希望在函数名和菜单项命令名之间有直观的、名字上的关系。那么下面的代码就非常实用:
struct command
{
ch ......
不调用库函数,实现memcpy。
转自:http://hi.baidu.com/sernger/blog/item/fa900ecb43d44f4ff21fe7ea.html
首先对这个函数做一些说明。
#include <string.h>
void *memcpy(void *to, const void *from, size_t count)
函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。
在C99中,to和from由restrict修饰。
先来看看微软的实现:
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;
#if defined (_M_IA64)
{
extern void RtlMoveMemory( void *, const void *, size_t count );
RtlMoveMemory( dst, src, count );
}
#else /* defined (_M_ ......