您的位置:首页 > 编程语言 > C语言/C++

C++/C程序的基本概念(0)

2016-04-05 17:47 363 查看

C++/C程序的基本概念

启动函数main()

C++/C程序的可执行部分都是由函数组成的,main()函数就是所有程序中都应该提供的一个默认全局函数-主函数,所有的C++/C程序都应该从函数main()开始执行,但是语言本身不提供main()函数的实现。

C++标准对main()函数不同于一般函数的限制

不能重载

不能内联

不能定义为静态不能取其地址

不能由用户自己调用



内部名称

在C语言中,所有函数不是局部于编译单元(文件作用域)的static函数,就是具有extern连接类型和global作用域的全局函数,因此除了两个分别位于不同编译单元中的static函数可以同名外,全局函数是不能同名的,全局变量也是同样的道理。

连接规范

为什么需要连接规范?

在使用不同的编程语言进行开发的时候,需要统一全局函数、全局变量、全局常量、数据类型等的连接规范(Linkage Specification),特别是在不同模块之间共享的接口定义部分。连接规范明确的告诉编译器采用什么样的Name Mangling方案来重命名这些标识符的问题。

通用的连接规范extern“C”

(1)对一个类型、函数、参数、变量或常量等指定连接规范。

extern "C" Student g_student;
extern "C" void WinMainCRTStartUp();


(2)对一段代码限定连接规范

#ifdef __cplusplus
extern "C"{
#endif

const int Age 200;

#ifdef __cpluscplus
}
#endif


(3)当你使用的C++编译器,并使用
extern "C"
来限定一段代码的连接规范,但是又想其中某行代码保持C++规范,则可以编写如下代码

#ifdef __cplusplus
extern "C"{
#endif

const int maxAge = 300;

#ifdef __cplusplus
}
#endif

#pragma pack(push,4)
typedef struct Person
{
char* m_name;
int m_age;
}Person *persionPtr;
#pragma pack(pop)

Person g_me;

#if SUPPORT_EXTERN_CPP
extern "C++"{
#endif

int   _cdecl memcmp(const void*,const void*,size_t);
void* _cdecl memcpy(void* const void*,size_t);

#if SUPPORT_EXTERN_CPP
}
#endif


(4)如果在某个声明中指定了某个标识符的连接规范为
extern "C"
,那么也要为其对应的定义指定
extern "C"
,如下所示:

#ifdef _cplusplus
extern "C"
#endif

int _cdecl memcmp(const void*,size_t); //声明

#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
extern "C"{
#endif

int _cdecl memcmp(const void*,size_t)
{
...// 功能实现
}

#ifdef __cpluspluse
}
#endif


变量及其初始化

什么是变量?

变量就是用来保存数据的程序元素,它是内存单元的别名,取一个变量的值就是读取其内存单元中存放的值,而写一个变量就是把值写入到它代表的内存单元中。全局变量(extern或static的)存放在静态数据区中,在进入main()函数之前创建,在main()结束后销毁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: