C/C++实战实用知识点记录
2016-07-16 17:04
357 查看
C/C++实战实用知识点记录
1.extern “C”用法。
extern “C”可分为两个部分理解。extern表示这部分的函数或变量可在其他模块中使用。”C”表示该部分的函数采用C的编译方式编译,比如函数void foo(int, int)的名字被编译为_foo,而不是C++中的_foo_int_int。extern “C”有主要两个应用场景:1.在C语言中调用C++函数时,C++函数的.h文件中函数声明需要加extern “C”进行修饰。2.在C++语言中调用C函数时,在包含C函数的.h文件时,需要用extern “C”修饰.h文件。(详见:extern “c”用法解析)2.dllimport与dllexport的作用于区别
详见博客:dllimport与dllexport的作用于区别3.static的作用
详见博客:static函数与普通函数4.字节对齐(有碰到过bug)
字节对齐涉及到节省内存空间和提高CPU访问内存效率,而一般的PC程序员不会去设置字节对齐(默认的字节对齐访问效率较高)。字节对齐知识点,详见C语言字节对齐问题详解碰过的bug表现:程序中有一个C++类,它的一个int型变量表现极其诡异,明明给它赋值,但是读出的数据与赋给它的值不一样。通过调试,发现它在读取内存时错误,偏移了3个字节。在这个int型变量的前面,声明了一个bool变量,调试发现如果将bool变量放到int型变量之后,表现正常。后来发现,在程序中的其他地方(程序不是我写的),定义了一些1字节对齐的结构体,然后基本确认是字节对齐问题。果然在该C++类定义前面加上#pragma pack()这行代码,表现正常。然而,令人费解的是,我查看了所有代码文件,所有的#pragma pack(1)最终都接了一行#pragma pack(),将字节对齐设为vs中默认的字节对齐8.这里我有个疑问:既然设置了字节对齐,程序应该就会按照我的设置进行对齐访问,不应该会出现内存访问错误,为什么还会出现上述bug。而且之前的结构体重#pragma pack(1)和#pragma pack()都是成对出现的,也不可能会影响到C++类啊。
5.只允许运行一个实例
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解