1.ifdenf ifndef define endif
ifdenf ifndef的作用是防止该头文件被重复引用。
比如你有两个C文件,这两个C文件都include了同一个头文件。
而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
注:#pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。
#if !defined(AFX_GREADER_H__A38AD308_3323_4319_9F9A_8D51D3C5138A__INCLUDED_)
#define AFX_GREADER_H__A38AD308_3323_4319_9F9A_8D51D3C5138A__INCLUDED_
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
2.__cplusplus
#ifdef __cplusplus
extern "C" {
#endif
//一段代码
#ifdef __cplusplus
}
#endif
__cplusplus是c++编译环境中的自定义宏,这个宏表示告诉编译器下面的函数是c语言函数 (plus就是"+"的意思)
3.extern
关键字extern为声明但不定义一个对象提供了一种方法,extern声明不会引起内存被分配。
extern int a;表示 a是在其它文件中定义的一个变量,需要在这里引用。a已在别的文件中,所以不需要再分配空间了。
a变量:
第一般有两种情况,一是该变量是在其他的文件中定义的全局变量,简称外部变量。
第二种情况表示变量在本文件中定义的全局变量,但是在使用之后(因为作用域)定义的。
实际上在类、函数之外声明的变量都是全局变量,所以如果在两个不同的.cpp中声明同名的变量,则在链接时肯定会报告错误。如果要避免这种潜在的冲突,可以在定义变量定义
前加static,如: static int nValue; 这样,在声明这个变量以外的.cpp中nValue不能访问,也不会引起冲突。
extern "c" 表示函数使用C的连接方式,也就是说能被C语言写的程序调用。
extern "C"表示编译生成的内部符号名使用C约定
例如:
int Fun(int i,int j)
C:_Fun
C++:_Fun_int_int
具体生成什么可能与编译器有关。
阅读(2365) | 评论(0) | 转发(0) |