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()结束后销毁。
相关文章推荐
- leetcode 链表排序
- C语言常用的宏
- c++之函数的调用
- 给c++程序员的一份礼物——常用工具集
- C++实验2—模拟ATM
- C++ 安全的删除指针和数组的宏定义方法
- c++封装之对象成员指针
- c++ 类的复制构造及赋值运算-练习题
- C++虚函数实现&&单继承和多继承下的虚函数布局
- 标识符
- C和C++的混合编译--extern “C”的使用
- 第二次C++作业
- C 【石头剪刀布 问题】
- C++ 中vector的学习
- 复利程序(c语言)(张俊毅 周修文)
- C#调用C++DLL传递结构体数组的终极解决方案
- c++封装之对象成员基础
- C++:可变数据成员
- C++之Dlib库实现68个特征点人脸的提取(根据Dlib官网例程改写)
- C语言 fork()笔试题