我是靠谱客的博主 妩媚板凳,这篇文章主要介绍c++tricks——#include使用技巧,现在分享给大家,希望可以做个参考。

<<1>>

定义一个头文件,test_var.h

#defineVAR(type, name)

typename;


VAR(int,i0)

VAR(int,i1)

VAR(char*,pstr)

在源文件,test_var.cpp中定义

//code-1

structtest_stru{

#inlcude”test_var.h”

}

于是test_stru结构体中就有了inti0;int i1;char* pstr;三个成员变量。

<<2>>

若头文件中不使用

#ifndef…

#define…

#endif

#pragmaonec;来避免多次包含多次定义。那么头文件中的内容会在每次使用#include”...”时替换掉#include”...”,这个原则和宏定义很相似,甚至很可能根本就是一样的东西,只是宏是一小部分的替换,#include是整个文件的替换。比如code-1在预编译后,呈现在编译器面前会是如下:

structtest_stru{

#defineVAR(type, name)

typename;


inti0; // VAR(int ,i0)

inti1; // VAR(int, i1)

char*pstr; // VAR(char*, pstr)

}

正因为#include预编译指令的这种特性,使得头文件中如果不包含“编译一次”标志,编译器就会时不时提示我们某某对象多次定义错误。

<<3>>

另外,预编译指令#include还有一种用法:

{

#inlcude“test_var.h”

i0=1;

i1=3;

pstr= “aaaa”;

}

{

#inlcude“test_var.h”

i0=2;

i1=4;

pstr= “bbbb”;

}

#inlcude“test_var.h”

i0=1;

i1=3;

pstr= “aaaa”;


#inlcude“test_var.h”

i0=2;

i1=4;

pstr= “bbbb”;

//(正确用法)成功编译,{}限定了作用域,每一个{}中的i0,i1均为栈上对象,相互间不混淆。

//(错误用法)编译失败,提示多重定义。

另外注意一点,当头文件中内容作最后一种用法时,禁止在头文件中定义函数,因为包含头文件后,会形成函数嵌套定义,为c/c++所不允许。声明函数原型可以。


最后

以上就是妩媚板凳最近收集整理的关于c++tricks——#include使用技巧的全部内容,更多相关c++tricks——#include使用技巧内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(122)

评论列表共有 0 条评论

立即
投稿
返回
顶部