C++头文件,预处理详解

时间:2022-03-29 16:18:49

一个例子

C++遵循先定义,后使用的原则。就拿函数的使用来举例吧。

我看过有些人喜欢这样写函数。

#include<iostream>
using namespace std; int add(int x, int y) //A
{
return x + y;
} int main()
{ int re = add(, ); //B system("pause");
return ;
}

但我更偏向下面这种。

#include<iostream>
using namespace std; int add(int x, int y); //A int main()
{ int re = add(, ); //B system("pause");
return ;
} int add(int x, int y) //C
{
return x + y;
}

C++的编译是以文件为单位,在某一个特定源文件中,则是从上至下,逐行解析的。

第一种风格中,A处的代码既是函数的定义(函数的实现),也充当了函数的声明。函数的定义是函数正真的实体,和逻辑实现。而声明则是告知编译器:我这个函数存在,我这个函数外观是什么样的(即  :返回值,参数类型和参数个数的相关信息)。

当编译器分析到B处代码时,编译器已经知道了函数存在,则允许出现这个函数的调用,知道了函数的外观,编译器还会分析函数调用时是否正确使用了,如参数个数,参数类型等。

这个过程中拆解开来就是:定义 , 声明 , 使用。显然第二种风格更好的阐述了这三部分。

那么问题来了?当项目过大后,实体(函数定义,类,结构体,变量定义等)会放在不同的文件中。但是编译器又是以文件为单位处理的,它在处理main.cpp时,完全不知道lib.cpp的任何信息。

那么,如果要在main.cpp中调用lib.cpp中定义的函数,就必须手动将lib.cpp中的函数头拷贝声明到main.cpp中。那如果在100个源文件中调用了lib.cpp中的函数,岂不是要拷贝100份?

这样累不说,又容易出错,还不利于后期维护。

于是预处理器说:“你只需将lib.cpp中的需要共享,在其他源文件中使用的实体单独声明到一个头文件lib.h中吧,别的源文件需要使用你的lib.cpp中的实体,只需要在他们的源文件中加上一行预处理指令:#include"lib.h"    就OK了,剩下事交给我”

于是一切变成了这样:

/*lib.cpp*/
#include"lib.h" int add(int x,int y)
{
return x+y;
}
/*lib.h*/
#ifndef _LIB_H__
#define _LIB_H__
int add(int x, int y);
#endif
/*main.cpp*/
#include<iostream>
#include"lib.h"
using namespace std;
int main()
{
int re = add(, );
cout << re << endl;
system("pause");
return ;
}

那么问题又来了:预处理器它到底是怎么帮你的呢,它做了什么手脚?

下面我们就来用VS2013看看预处理的结果。如何查看预处理结果--->点我

如果安装有g++编译器,则可以使用命令:  g++ -E main.cpp -o main.i   来生成预处理文件

/*lib.i文件*/
int add(int x, int y); int add(int x,int y)
{
return x+y;
}
/*main.i
前面省略87260行,都是iostream头文件里面的东西,真多!
*/
int add(int x, int y);
using namespace std; int main()
{ int re = add(, );
cout << re << endl;
system("pause");
return ;
}

总结:

1、预处理器在.cpp中遇到#include<> 或者 #include "  ",  都会将#include<> 或者 #include "  "指令替换为他们包含的头文件中的内容,形成 .i文件。

这就是预处理器对头文件的处理结果。当然还要考虑到预处理器也是有逻辑的,比如防止重复包含#ifndef   .......#define .......#endif

2、头文件只在预处理期起作用,预处理过后生成  .i 文件,此后头文件就没有作用了。

3、预处理指令 的 作用域 为 源文件作用域,也就是每 一条 预处理指令 只在它所在的 .cpp文件有效。

4、预处理不属于任何名称空间,名称空间“管不住”预处理指令。预处理指令不受C/C++的作用域规则,它是一种编译前期的机制。

5、用户将一个源文件( .c 或者 .cpp ) 提交给编译器后,首先执行的是该文件的预处理(处理源文件中的预处理指令),预处理后的结果为编译单元,这种编译单元才是编译器真正     工作的对象!程序员眼中看见的是 源文件(.c  或者 .cpp )和头文件, 而编译器眼中只有编译单元(预处理后形成的.i文件)。但是我 们口头上说的C/C++编译器包括预处理器。

如果你不理解C/C++的编译过程,请点 击我

以下通过几个特例说明需要注意事项.

防止头文件的重复包含

当项目大了后,编译单元之间的关系变得复杂,就很可能出现头文件重复包含的情况。虽然大多是情况下,重复包含头文件是没有问题的,但是这会使.i文件膨胀 。

C/C++遵循单定义,多声明的规则。声明多次没问题,但是不必要的声明除了在利于代码阅读外的目的下使用外,其他的要尽量避免。

一般采用以下方法。

#ifndef _XXX_H__
#define _XXX_H__ //被包含内容放中间 #endif

C++提供了#pragma once 预处理指令来达到上述效果,但是很多人习惯了C中的写法,也为了获得更大的兼容性。

普通全局变量

有时为了让一个源文件中的全局变量在多个源文件中的共享。

普通全局变量是有外部链接性(多个源文件共享一个实体),也就是它可以在所有的.cpp文件*享使用。因为它将在所有的源文件*享,所以必须保证不会在其他源文件的任何地方出现相同的链接性且相同名称的全局变量,正所谓一山不容二虎。

aaarticlea/png;base64,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" alt="" />

下面是错误的写法,编译不通过,提示错误:error : “int sum”: 重定义

相信如果你明白了头文件和预处理的机制,你就应该知道为什么是错误的了。

/*share.cpp*/
#include"share.h" int sum = ;
/*share.h*/
#ifndef _SHARE_H__
#define _SHARE_H__
int sum;
#endif
/*main.cpp*/
#include<iostream>
#include"share.h"
using namespace std; int main()
{
cout << sum << endl;
system("pause");
return ;
}

贴出代码说良心话。下面就是预处理后的结果。很明显的:全局变量sum的确重复定义了。在share.i 中 重复定义了2次,在main.i中又定义了一次,一共定义了3次!

/* share.i */
int sum; int sum = ;
/*main.i
省略iostream 中的代码
*/ int sum; using namespace std; int main()
{
cout << sum << endl;
system("pause");
return ;
}

要保证其他源文件能使用普通全局变量,又不会重定义,就要使用extern关键字来声明。extern用来声明。

改:

/*share.cpp*/
#include"share.h" int sum = ;
//extern int sum = 100; 也是OK的。
//这里 的extern是可选的,加上extern 的唯一目的是,暗示这个变量会被其他文件使用
/*share.h*/
#ifndef _SHARE_H__
#define _SHARE_H__
extern int sum;
#endif
/*main.cpp*/
#include<iostream>
#include"share.h"
using namespace std; int main()
{
cout << sum << endl;
system("pause");
return ;
}

全局static变量

static修饰全局变量的目的就是为了将外部链接性改为内部链接性(仅仅在定义它的文件*享,对其他文件隐藏自己,定义的实体是源文件私有的)

这样避免了对外部链接性空间的名称污染,其他源文件完全可以定义具有同名的外部链接的变量,当然也可以定义同名的内部链接变量。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7IAAAH7CAIAAAB+KjQuAAAgAElEQVR4nO3d748cx53n+f5f9tnhsMD1g9477KN7dBgc0FzgDuiHt2jggDvgGqA8lk+usXftnTFmqrzGrFo/LJVaI+sHS1qJzhn9GFOlcTeZpCmTtChKRcoluqil7BqDwkiyLCP/gH2QvyIyI7OiuqIiv5X5foGYaVVVZ2VmhKM/9a3IyK0IAAAA6LytpncAAAAAaB6xGAAAACAWAwAAAMRiAAAAICIWAwAAABGxGAAAAIiIxQAAAEBELAYAAAAiYjEAAAAQEYsBAACAiFgMAAAARMRiAAAAICIWAwAAABGxGABQY2tJTe8vAJweQxgAYOn4S1wG0D4MVQDQRevOwaRkABuHsQkAOsRDeCUfA9hQDEkA0HISEmrjOwAACzEMAUBriY2hMvcKQMcxAAFAC21K6NyU/QTQBQw9ANAem5syN3fPAbQGIw4AtEFrMmVrDgTAxmGsAYCN174c2b4jAiAfAw0AbLB2x8d2Hx0AaRhiAGBTdSQyduQwATSO8QUANlKnwiJlYwAeMLIAwIbpbEDs7IED8INhBQA2ScejYccP37Mw2N4Nxk3vBeAPYwoAbAxCYeT4JExHR9uDSeHB8aC/fRBODS+f9M70t+v/pVsbD/p7o/ni39o9Gs5K7xMG5scLrynu5KRX/VvK/lS8eBbuLTy6ZJ+zrDzp7fZ7Yf0bnVb5AA2HrOz8rva+09GRts/pL+a7Nwv31DNg2ripe8yHB/1yn6ncvcp9dnHq6ptMfV+bHuXPfHhQf6Tr7Ff1OjqqAsDGIROrnJ0K41/o+fCg+Fc5iqJylBwPtJfpKWrSS1Ky/ls12U5RHc3zF5Ti3Wqx+BTKxzIL9xwVmAvn1vx2VR85DsKx0hbjQRZktaNWz4kxdRk/NVUeo7Z7abCram4np67mV2bh3ubG4nX2qwW6PrACwKYgE6tcno1JbzcYh0FdfTT5I71ULM5en/zWeFAuuxrDdxRFpVqmYZ/TZ8PAmPkKbGOxbQFyPjwwPFU8xt1TV/j0vBvvqjliTnpqYErPRt4W6pnMWjnesTDY3g2Ghbqycpj5Rmq6R9bi8Wvi38121bDP7k5dC6vF6+5XizC2AsAGIBOXNXBOrCdRaLW6PBbrf8uTmnTx6/662QtJspmOjtRZAdV7UgoZ5s0qO1aoMqq0hKcX1OOnSnORT/3F93R0pPximuArKq/Kp5H58EA5RYNJpJWKTRXoWPmo1cSZnJ/Cdwjqf86HB/3eID0Jg7DytB+EU4enbkOqxVY9PNm99farxRheAUA6MnGVdZ+ZYsnWulo8mw8H2Rxc22qx+St7wzzLSS+rBWrByHe1WI8vR3vO5oPm6TZSjzF5l3IQTF6vhunkZBbOT37mDTGrfP5N5f/4F/V6Z9xPRkqFONt+RbXY9tTFzaHsw3ig7PzS1WLlY1LtnIS8r6qF9pot1D5bOo3lanHWG9farywwwgKAdGTiGqucnPhb76xWWqqoqYXGKIqWnUSR/ueCanHOWPwr5aqk9pZ+uWyoqpq4nltsquotflM7+bQQ/T/DYHs36A30rFZReuwNjrYHkygM1PZNavNZFflMNvk7GJs+lqSP1Bbd4xk4cVGzqhi8yqlTuuV0dHTKtUGSrp61+Hx4UHtdqfr5ZzSp3IKa/qufXS0Wu+tXNhhkAUA0SsX1Vj4/2p/YuPx2EE7NEWSJlSi037KeW2yMztojWmFSr6o6iMWLDjA/IeY5oIUAVDlpoU7xU0S+EXXCbs207CiKtD2Z9JRZIuoeJj+Xs7X6AkNZtCKY2q5EsfSpS66/nIV53XTZZUPKZ0zdWuG8VV1QWLOF2meXjcXr6Vd2GGQBQDQy8UIOY3H6SMW3zEtVi9O6V7EGXLXMRRRFxWkb6hziRBgk14qZLz5bR7U4rvwVXlxZ1VPW0Kg90irxAUbz6SzN6MYJCerMCtMsVa0tZuFe4dK63b5aOY5p/5ltdkGe0/Y8n9liTqimOcpWpy5uggUl0opJOOm7FFtQ+7SgvVHV8nM1W6h9dtW5xQtOjlOMswAgGrF4oTXF4kXzL6P6qpU2IzZbyCIYJ3/UC4VeRVqPrPvGPNnmohWRR7XLa5jLwMUDrLhUq+7L7nTyiYP4orWOVTk2ifvFxfJMX+jHP5uq+IUX15/nmmnES0+iqDh1lbHYUPw2ajwWu5hE4bBfVWKcBQC5mEFhY7WzpASv9Atcdb3bwvfvtkWv/C+6OplVKxZWL2Cszh42W75avFj9EnXFY7SZA7pyfCls9tSxWCnY1+TIBZfcFa6/LE8EdxGLja9JvjQwrNmnXY5p6J9qZC9McqhYm6Jywez6LVhvPzu6mgXa1t6vajDOAoBcZGJLpz9R6V/oOBSW62S1K1vVVIvTEFy+rUP+R11fhkx5x3LILr9myVg8HR2pW9MWNKhWfW2TZXw5RTBStnma3KnG4iCdhqFnx8FkOjpaMImi+Igy5zW5kq90aI5jcWEJiHR/Cis8nDGtslyWXBKnL8qhffzTV7dQC+3qys0VW1jwrOHo1tSvVsZQCwByEYstne5EJXcMnlR+cbxIdSxW1iROJk5oF6sp692Wlg8r1EcNM1yXi8VJeNK/xZ7O0gBUW2Cuj8XlS6M0NXckWXCzkorUXpU7F84tVuRRMjn8unRu2Eg2b7j8i6tdcld8l2ypZu2N8hUesoicTXRZPIkiVCY9Fz4PaGfbtJJd7RYWPFu09O08zCdnHRhqAUAuObF40t/Z2traD7IHgn39v5t1uhOVXN0VRTU3xUjDgeFeaDVzDML4G/bit72GlQ2icqXNoPiLlrG4GKpMks8G2mvyr+Nrvwc3VfXURGVxdVrFliunt55ybnF549n+mxZf2w3GamhWk7fyXsXPG5YTvivnn9iduuy31A5TszCFqwRZf0OQ5W4Xcopq8TInZxXND7UAgCpyYnEUB+Gd/iSKkpAsJhNHwk4UFjHPHoFkLmOxYIwgACCXsLSXBGNxoVjciQLahlgMAGiYuLQXz6VIi8ZyiDtRQLsQiwEADRO3QJvIWCzuLAHYTIwgACCapMA36e+kkygkBWNJpwjABmMQAQDR5GQ+sZfcyTlFADYagwgAiCZkhkCwr8+dKC3Y1hQh5wdACzCIAIB0xL4anBwArjCOAIB0FESrcGYAOMQ4AgAbgPxXxjkB4BZDCQBsBlKgirMBwDlGEwDYDARBFWcDgHOMJgCwMbZ0Te9OMzgJANaEAQUANknHQ2HHDx/AWjGmAMCG6Ww07OyBA/CDYQUANs9WSdN7tF5dO14AjWBkAYBN1ZGk2JHDBNA4xhcA2GDtLqO2++gASMMQAwAbr33xsX1HBEA+BhoAaINyjtzQKNmaAwGwcRhrAKA9jJlyU2Ll5u45gHZgxAGAtqkKxwJT5gbtKoDWY9wBgNYSGzrF7hiALmMAAoCWq8mgVWH0xke/u/HR75rdBwDwjGEIALrCJpv+j//L//5//H8/Ont4fPbw5PKt++t7I9IwAGkYjwCgi8rx9H/6X//PP/v33/l3/+/fxJk4/r//w7/53+Ks/Gf//jv/6l//26XyLlEYwGZhbAIARP929/9W03D6Q5KM/+c/+7/iR+KUTA4G0EoMVQDQaeNr977zzGUlCqv/N0nG/+7/yUvIC5Nx0wcEAKfE+AUAnfPFH75+88rdZ9/64PkLE1OR2JCM/2L4i+zBU885BgDJiMUA0BVf/OHry7fuD1//IE3A5RBsTsY/HF2LoujhJ0OSMYAWIxYDQHvMH3x5+96DuBL8xpW758Z3sh9+9PINJQ2fLJuMr3746fmTafbgs2998MUfvm76cNvj9r0HblfEA3AKxGIA2EhZ/H3hwu1HX3vv+89drci7xh9skrH21FtXfxNF0SNPxQXj4zeu3G36BLTH+Nqs/9K1VVbEA+AEsRgANkAWgk0JuCrsnjIZP3/h9n/9+UeFp+JYHEXRnz9+6ezhyTefPGn2hLTGTy/FNfiLZw8vkoyBZhGLAUCE7DK4N67czeY/WIfgVZPxw09eOje+88RPb/7j1d9EUfTq8a/1l2nl4T9//NLZw4sPk4xXML42e/z8zb9I1gC5SDIGJCAWA0CT5g++fPPKXX3i7/GivOssGT/yVPjChdvlWa2f/v6LwjazanEsTsbffPKix1PVHm9evavmYJIxIASxGAB8++PXf3rzyt3D84VKcFUaXikZf/+5q3/5k3fPje+8ceXuEz+9GVyaZj/UX+P1g+ffVbdZnkz8rSfDs4cXv/HYxcfP33zt+KN1nrA2uPT+p4+fv/nsmx88f+F2OQeXH+EKPMA/YjEA+PPp7794+Z8+euSpsCLIrpSMs/h7+db92/cezB98ucquvjS+rU44Nl5j9+ir76Ux7uLfvHjts8+/WuUd2+f4xifPvvnBufGdx8/f7L90TQnBF2uT8ckPX75+c/r7pncf6BxiMQCsxey3/1KYK/xXSf21Pt3aJuMsBK+egI3euHJXed/KpSfmD7785hOX4mz3zScuPfPGrXPjO6/8/A7Lt/3x6z9995kreva9aJGMT86f/LrpfQc6ilgMACsprBP81D+8/+hr79kl3QXJOL4MLk7V2fyHNYXgsjQWJ/vz+uWPa178F8Mr5cx3+NrN4FJ3E95rx9lqHjbJ+OSHL18PLk39NC4AI2Ix0LynX3+/6V2ArWy9iNo1IsrZd4lk/O2nL58b32l8aunLP/9IPaIfPP9u/evVCRVq5vsvr97oTuV4fG327JsfvHHlrj6BeGEyPnn5n5icDTSPWAwAi8VpuHq9iFWT8Z8/dvHc+M7lW/flFAv1SRQnZw+PP/39F/W/Mn/w5RM/vTk4d71cDT187WacF1s8xeLyrfsVUdiYjE/6L10LLk2zRfEANI5YDACVvvjD15dv3R++/sGp6r5WyfgHz7978qtPBMbEwiSKs4cnF961TW+3Pv7nh5+4VIqGWkCMg/K58Z04LidLNZd+Vn8QmKfj8vC58Z1DbeZMVTI+ee4fP3zipzcfO//eY+ff46I6QBpiMYDu+tnV32Rzgss/6LXh082I0J79D89eKcwVnv63z5o+B5VeTm50t2Axiipf/OHrHwc3g0vTH71y45GnwurSqZYaK34u5ulXfn6n8bL6G1fuplHYcNmc8UgffuLSmhbrmD/48o0rdwsfJIwfMIyfN+KV48oPVj2ebSd72ePnb77y8zvrODTAJ2IxgC767POvngzer06xlrdKNr+msE7wO9fv3b73oOkjXs6l9+//9YvZusULFqOwceOj3/WevuIqGcf/9/vPXX36H27VF5iXSoo1Revs56f+4dZ/eu7db/04q4VXLihhWHbt3HX7N7LcvUNtjnv5dNVXr9Ufqh6seXFxwvQjT4VdvsgSLUAsBjZeujxWntL++qUFV0d1hHo7ZbUM/Nj59x5+spAbTp+Ms/UivK0R4YGymMZxlozfWnkK7KOvvqdUjh0kY+sX2yfFmm1mhfOLizKiscPU70b9gVj+VvPJ+Ozhxf65a89fuE0+xiYiFgObKvuD9K0nL33jcfUP1fHZw+NvPHbyveeu/u2rN7I4mJea9JhY+LnqNcanjHMPjJstb6rwr2ofbF5gfHHF5XHqD1ULBlsl4zgNN75exJropyX5t0q1WHXjo99l681VTLEQmIzL/wrPGpNx/Y61NhnHPefFtydOOgzgDbEY2ABvXrlrWg33ov4HKXn8IaW8p0S6hRHQ8jXGp+pz5MKZuMYtL3xrm40bn10pGT/yVPjChdttTcOZ0lk6Pnt4vL6VBLOgnMVldanmN0q3rS7l6aqYuL5kXOhdVUXiZQNr/YFsVjK+ePbw5LtHVygbY4MQi4FmFO5/plZeC8XX7zxzuTb2Gf8gHSv/TkrhtSr5Wb7G+FRLkvFLb982hrD4h9an4YxylrTuJO0M3Pjodz965cb3/u4X1TFxTcm40PmPK35l4dtVvdHpdi9/6ttPh+oE9+yLlEKXNnb1x86/Z3yw6vFsO9nLfji6TtkYm4hYDHgVz3atSLrl8Grzbf6x8keRZLzwxZXJ+LvPXLn18T833UGkMHXL428+cenozVtN75rZ/MGXl2/dry8wl3+oT4rGovW3n7pcysfJD9979urfvnqjZvtVO1ZTHV9294JLUyGrX88ffJleZEkyxsYgFgOeVN8MgmTsLxlnl8dp5a7X3nvj8sfSFsSVQPnYkEfApneqef/55ev6/+K0H/rnrp0b33n8/HtMHoii6PvPXc0GB5Ix5CMWA2u3qDy8ajLOVsN94qc3//InVx/5cViVjIdv3LIpXFkWtyy/kK0vgFX9q6+32Vfa1EekTQCQLw18ajg+aXqnRHghv7ezIRnH//ehwxOCYHoLcZIxNgOxGFijy7fuK0uK1hdQl0vG58Z3stVwb997QODDOqg10YeS7ke1OPHO9XvxJ65vPGZOxg8dXjx7ePJXz7/b5bLx+ZNp4Turqx9+2vROAZWIxcBaXHr/vlIhtpqxULj/Wc3kwsLEwXPj22cPj5s6UrTY2cOTLA0/lH750PROSdR7Oiz9j12rHP/V8+8evtbRaRV/+RPtvjCrr34NrA+xGFiL53/2YXmVA2Myjme7nvoSmT9+/Se3ew5k/iqZGKpNL256p4SaP/hSXzPuuLR42cnZw5O/6eStdv7yJ+9mc7pcrX4NrAOxGHCsdFfhymTc4ptBoB1+/clnSjc+fugxLrlbTF8zrlA5vnj28OIjPw47WDn+9tPxt2fHVIshGbEYcGZ87V7FXYWLyXiV8jDg0w+ez78Bf+vqb7799OWm92hjxGvG/eiVG6XL8rpYOU4nGZ9877lfNL0vQCViMeDG5Vv3q3Nw/sgLF24TiLFBXhrfzi6Wev3yx03vzkbSV/DVkvE3n+zQpJRskvF/efVG0/sCmBGLAQfeuvqb0lV0xWT87FsfEIixcd64cjeb+fPIUyFz2U/t6dffDy5N03ycry/+0OMduooxm0rxk5992PS+AAbEYmBVr1/+uGJJNS0Zn7z335reU2BpaSxOuvc71+41vUcb7+nX3//2U5eVOcfHZx8Td1ftNcmmUrBSG2QiFgOnV7q6zpyMV7+r8KX37z96/leudhuwl96OIenSP3i+Q9Nh1+rRV9/LplLEY8XlW/eb3ikf/uOzyX3v+ud+2fS+AEXEYuCU/iH82HR1nZaM//PLN1a/q/DxjU9c7TOwLP0uZSdnD48//f0XTe9US8wffPnET29+47FLXUvG33oyjHsUN72DNMRiYGnHNz6puJmzloxfuHC76T0FVqXE4qSrX3iXBbYc+97fXe1UMv7s86/S28ScMJUCohCLgeX88es/ffeZK8Ybc6j/+fLPP2p6TwEHlEvukmTM7RjW4YULtzuVjF98+zZ394BAxGJgOedPPjIFYi0Zv3rcrYX60WL6JXfkmDWKk/FrJ79+48rdFWdebYT/8Owvzh4e/81LzDCGIMRiYAn64sSGH1a/ug4QpXDJHXcpW6t3rt+7fe9B03vhSTY/h8XaIAexGLB14Zez0kIT2g//9Z8+6kKNBxtn9tt/OfXvqusWn+XmvXDn/Mk0nzfyfvvnjWAjEIsBK6YpxfnPP/nHD7lVB1qpsG7x2cMTYjFc+f+fipekOH74yYvcKQYSEIsBK6N3blfMJD5++IlLn33+VdM7CKxFaRIFl9zBmVePf53NWX/mjVtN7w5ALAYWufT+fdNybHkyfv0yKQGtVZ5EQSyGK599/tU3HruYJWMWa0PjiMXAAufGtwu3M1B/YHFitJtSLWYSBdzLVmo7e3g8GF1renfQdcRioI4+pbiYjM+NycRoOf0ud0yigHvp7aApGKN5xGKgTmmV4mP/U4rv3Odeu2hM6S53TKKAY8pN71jnBA0jFgOVlBXZDMn4wtVZ0zsIrNGl9z99/PzN+J4LajImuMC5V49/HQ+wr1/+uOl9QacRiwGzzz7/6pGnQiUT58n42bc+YDk2tN471++dPbyo3/mZu9zBmdlv/+Wlt28Hl34dRdFnn3/18BOXzh6esFIbmkUsBsyeDN4vrU+c1ol/SZ0YnfDChdtnDy8WwjHVYrjyd299+NDhyYtvT6Ioeu5nk3iMZaU2NIhYDBj84y/u6osT58mYVYrRKf2XrhOLsT7/6Sfvnj08fvHtiboUIDe9Q1OIxUBRafqEloxZpRid8saVu2nB+CKxGM5ld/T4wQvvZtWH7z5zhakUaASxGCgyTZ84YUU2dFO6EkVeMP7+c79oeqfQHp/+/ovS/PWTs4fH71y/1/SuoYuIxYCmevrEyXefufLFH75uegcBr/R1i5P4Ek8GBZz4wfPvlpPxI0+FFIzhH7EYyOk37ygm41sf/3PTOwj4pq9bnE+l4LYLcOXld+4olzXn1zcf/+qTpncNnUMsBnKlm3fkyfiVf7rT9N4BDVAuhFIjy/GTf3+z6V1DS3z2+VffeOxiORmzFCD8IxYDiXdufGK6eQfTJ9Bp6RVRhUoeBWO49MKF26UOdjIYXWt6v9A5xGIgoc+hPGb6BBBpV0QVk/H3uPYOjqgX3j2k9DQ+esEzYjGQGL7+QXlyG9MnAOWKqMLdbY5/8rMPm947tITpwjvmUcA3YjGQSNcq1pIxN+8AXhrf1j8rajVj6nlwQu9m3DsGzSAWA1EURbPf/ktp6Qlu3gFEUcUabVmCIbjACfUud/QuNIVYDERRFL3y8zvKX/3kbz+LswJRcY22YjImuMAJ/eLO5P+y4Ak8IxYDUXBpWrrS7oS/90BMX6OtMJWC2Z9wo7BMW3rhHVfdwStiMTrt0vv3v/PM5dKFREksvvHR75reQaB5abXYMIOCr7nh0Itvl5dp43MXvCIWo9P02WzFZMxaxUAURedPpuWwwuxPrMO3fhzyuQsNIhaj084VL7HPk3H/HCvJA4n/+OxVUyxmbjEc++HL11mMAg0iFqO7/vj1n777zBXT9Injs4cnb17lmzsg8dnnXz1UnETBd9xw769f+mXhAxixGD4Ri9Fd508+KheJ4/88fzJteu8AWZ772cRYMCa1wKFHX/1VYUCmg8EnYjE66p0bnxiLxM++9cH8wZdN7x0gzvmTaXkZiv65azenv29619Ae6SSKvKfxdQR8Ihajo158e1JacIohGKjD5VBYN2USRTIyH715q+mdQocQi9FFeqlYS8YXfjlreu8Aof721RssQ4G1evS1XxVuHHP42ntN7xQ6hFiMLkoXoCgm44efuPTZ5181vXeAUPp9PZj3ibV4+En1S4mTx35KLIY/xGJ0jr4AhZaMX7/MDAqgknJfD5ahwLoU7qr46Ku/anqP0CHEYnTO65fvlm7ZdXL28PjFtydN7xogWhqLmVuMNSp8+mISBXwiFqNbLr1/v3/uWmHuWvzzOzc+aXrvANGUWJykFi6HgnOFuyoyiQI+EYvRLfrf9TwZUyoGFir/z+fF8e2mdwotlN5V8fjs4cmPXrne9O6gQ4jF6JbS33UWoABslS65Y24x1iK9q2IyRF/98NOm9whdQSxGtyhrUOT/WIACsFG+5I65xViTV49/nfU0Pn3BG2IxOqS0BkXy7/zJR03vGrABuOQO3nz2+VcPP3GJ5bHhGbEYHfLLyW/TycTcvRZYWvmSO/IK1ufvw4/j4frJv7/Z9L6gK4jFgGPvXL/3y8lvm94LwD1u5wHPXrhwO07Gl9+/3/S+oBOIxQAAK9zOA/7Fyfi7z1z549d/anpf0H7EYgCAFeYWoxFxMn7n+r2mdwTtRywGAFhhbjGa8sKF2xSM4QGxGABg5Z3r95hbjKa8c/3ep7//oum9QMsRiwEAttJLoJhbDKCFiMUAgCWoyZhqMYA2IRYDAJaTJWNiMYA2IRZjU22h1ZruX1ggTsbEYgBtwt8ebJim0xp8a7rHodI71+/dvveg6b0AAGf4k4ON0XQ8Q5Oa7n2AY03/Twpr1HTnwunReNgAjDsdJKfR1/nXE1410n8Kmj4H8Krp7oal0WaQjlGmyxr8M+Pljyaa4a0X0aOwxZ+tjUJrQTQGF0Teu4Gvv5Vo2Lo7Un2P8vbu8I8W31y0E+RiQIHKQ3/gj1m7NdK+dKfOYjDZRDQShGIoQdlaewV/wDrCZ1ihU4E+sFloIQjFIAKjNXUM/nR1jYcWp0chQ2fYFDQPJGIEQZV19A36W2etr+npVCigS2wE2gYSMXaghtvuwd+qjltTB6BToYxeIR9tA3HWOnDMwr3dfi+M/2M+PMh+blz1zmj7jCiKnHYS/lCh9d8/hMH27tFw1vRuQFrHQBkNA3HWOWpMR0fbu8E4/c/xQFDcrNqZwj4jitx1Ev5KIVpDN/Dfqeo/8Dcfi/nYn2LAEY6GgThrHDXmw4P+3mgeRZPemf72btAbHA1HwfZu/GBT6ncm22conMdiJ3uFzbXh3z8s+MDffCzmY7+CYUcyWgWyrHW8KP5tmPTO9LcHE/Ul09HR9pn+9pn+dm0BYzzopy9LN5hsfD48yJ5Sxvr6Zyt2xrTPSK3eVfjjBNUGf9Za9IG/yWGEj/0ljDyS0SqQZZ3jxXjQ3z4Ip8l/xV/q6V/tzcJeOkBPR0cVf0gmvTP6dkaTKIqiMNBScjQfHijZt/5Z484Y9hkKYjHc2txYvPAD/+KP5Ro+9q8XI49ktApkWeN4MempBeAwSOLmLNwz50799anKr/zCoFhgVufMLXzWvDPmfUAUEYvhmpP+0ESnWvyB3/ixvGrc42O/Bww+YtEkkGVtg4XtDLZ4fK+cRzEfHphqHpGx7DHp1X2JqTy74j5304pdhT9LKNvIz1oWH/jrP5Yr+NjvCeOPWDQJZFnXYFEdZxXjgRqFjUO2z1hstc/dRSw+tW5+c21jA2Ox1Ydn2/GHj/2+dHn8EY4mgSxrGixm4d7iHKCP4xXVlMpv/cr1EvVPRf2zp9/nDmtxLF7z6trV8+b9E7Zu1+bFYrsPzxJjcbc/9ksefzqOJoEs6yo1m0QAACAASURBVBks7GawqReFxHPjkr/K44EyT24W7mnXjkx6A3XuXVb80C8xqX/29PvcYe2NxZJX13ZO1rpdGxeLLT88W38s52O/J4LHn66jSSDLWgaLxV/nJeLIm1w7kk+iKP2FnvTOlC64jv8MhOkWjFeCVz27yj53VmtjsczVtZ0TuW7XpsVi2w/PtR/L+djfALnjT+fRJJBlHYNFGPgoO9VXR5adzelnnzdaW2Ox1WJbwVj7CKd+otOKduZ1uJW3SD7yVfx6QfvX7dqwWGz94bn2Yzkf+xsgdvwBTQJZ1jFY+JnB5jIWd3vWnaWWxmLbxbaS16SJM40vhcqfeR3uQixWFuTSfl3TjXW7NisW+/zwzMd+t6SOPyAWQ5jNHSzc/tnAQu2MxZaLbSl9qTCts7KnKVsuVouV13d83a7NisXYXPQTsWgSyLK5gwWx2LM2xmLrxbbKExXS/yxcyWRch7s8iSJSf73Dy3UTi+EH/UQsmgSyMFjAUgtjsf1iW1axuHIdbtGxuNEZRMRi+EE/EYsmgSwMFrDUvli8xGJbNrG4eh3upWNxZ9btEhuLg/2trZ0+lxu0hsDxBzGaBLIwWMBS62LxEottWcbiinW4LWNxF9ftkhqLJ/0dubF40t/ZMu1d/HhiP9CeC/azZ6Qe1nrJG3+QoEkgC4MFLLUtFi+12Jbd3OKKdbgtY3EX1+2SGovtBfulCLreN6tIt8G++kiwryZjtfQtOvCvUdP9BJVoEsjCYAFLLYvFG7pkVcvW7SIWn/pN66PtpL+T7pfyY/ZU93Jx0/0ElWgSyMJgAUsti8UbulJ1y5brFhuLleCZxEplikKSMbVJC6WcGj+rxFG9gutq7yrk2beYitXf7lDpWNr4gwxNAlkYLGCpZbF4Q7VsXcKNicV5eiyk27pqcTlbG15UCNfmjF29YbNCsVh/bSEyE4vRKGFNMh8eWE8sm4V7tl+32RQhDAvIjwdeZrk5+suR35c1m8Bn9Y2keoupSc+wJ8qNW2v+FX4xW6i/5hEjBgtYIhZLQCx2vgWjYqJVsqOecOsnUSSbqQ7FK+9d1dPZ25Vf63pvNgLjj1jCmmSZWBzHtZqkpeaw8hL3hbxYDm1LxO6VFO8ydVrjQX79+N5onl9tk/1T75K1MOYaw27F+2ob13cmRyyGW8RiOLcxsbgwN9c2Fpdqzc73zvyGhavvqqrFHcL4I5awJqmLxVo1tDLGKWlMj8LT0VFWMFZ/NlRDD8Jp+e0WXR89HtjOirN/5VKSJBqn+eLanzU3Uy1Xiye93WBsrhzr4uRt2LJyxXqWrYnFcItYDOeIxW4nURhmRdTNLe4Qxh+xmm2S6ejIvmBpMaVBTXhRKWTHaa/8uP5bcXorlZMXvruQWDwdHe2Nwt5u0DN+ikgi7Hx4cDScWXzSqK6XJ79resF0dKSf9rbE4mVH706O9v4Qi+Fc22NxUph1XZ81D3UV1/QV37yTxWLGH7myJskTamVZMYrUGqp2H6Oj4UypuRrW1DQ/q1dtI1O12KJmWcMYxYqV1HIsPirf50mNxflJiHe+MF0hfUfDKTW+sjT9znCS1Z3X1/7MltwfD/q9MIv+ZunchjwWm9p6wUaSQ6ssnycbz3c43lpyYhfNSxE8WCx7OYjoy0eqVuCvW2Zf2Ar8xGI4145YXPU/T6tL7lbcO/WhqjcorVtsXetuD8YfsZImmYW9NOJUT3Wd9LQppPPhSL3LUfYr8e2UlMXeq59dIhaXZ8pW/dNycKF+HEWGYq2pWlw6+CwWazdhCsPsRBU3W31Ki6/UYnHFSVZVLMWfVYvjjZsrwaVqcS/U55Ds9vdGk+FBMC4WfTXT0VFl6TcMikenXP/XGyyar7z+wcJ+4PU2REtZgb9umX15K/ATi+Hc5sfi/H/hppxavFJvxXHHNOFiP6h4ovzmyi/k+9iNVMz4I5epSczzUEt3PEqV73qv3Cep/tkVq8WlXzcpTIcoloqjqrnFhY0rdVbzFIjaqRHaKa2JxZUnufxeB+FUPc/5HtbVerWjSFJyVtyd9JKkm4Xm2jNvjsVJe6mfIvKekFfHq7+RIBb7sviCcOXLTYkr8BOL4ZzYWNwJk/5OV1Ix/USuvEnU1QkMqaV6jTPDEjzKDTxrn11qbnFMncxgFYu1GGo8ispqsVIYzl+T7HMprBticcUprY7F9qvZx0V37SOEGnmLNeCKljVVi+MZL0fDMNyrngpcGYvDYG80j6L5dJZedad+b6AtDFKR3Z0OFnlhVLm9Url4YahcGF9ZCpILZhVs2Ar8NZfCiFyBn1gM54jFDepSKqafyBU3yXigBiZjtXhtsXi5arE2b9WQqs1JLtmsNv9Bf7ZqEkUaYQ0X8xXCcSHs1pxSL7E4ezirAef0Sc/aKY0rxONBf+/gqGaKed0kCoV2naL3S+602Bf0tdkA6tg76e+nzxnmDaiv1LeofyU56fdL4/mGrcBfs8y+yBX4icVwjlgMP+gnYm1FkZZiI30KhKIiU5q+E1ejcP2zRYvWLa5ec22BZCkxY4XSZm6xYY5yMg843QE97Nad0ppJFJUnWZekUv1sjAf93iCIPxsMB/EU4Wxtinm6V/kb9cKqanGWevWL58o7UL+XhTPpOxZXZsjaGQvakzWx2OqClQ1bgb9mVoXIFfiJxXCOWAw/6CdiJbH4jD7NIM1w2SoHUVReA2HSyy6l0hKnFhYXPFtUH4vTAKcu9bA4FmeF1cnwwHi9l2UsTgu6g+xZLfvqibbylJZeqX9OqDrJqtpL7tIdS1b/SGYbH4TTfE3ifA2KNBYX5hZnO79CLLa5YYqRu8EiraCaLisr5Dn1KjSrWGwXCjdsBf6aZfZFrsBPLIZzxGL4QT8RK1uJYi8vFubf+JeuAFNu06DOGd09GobKShHlUmjVs0WLbueR3WgjK2rWbS3dW+01k96ZwvQD8yV3GrUum80YLq5Qlr5d/OsVp9TwymL53HSSM2Fg2Pl8gbbkRMUTfLW4r03nzW7YEYyjYiweD7L0XHX13oLJHtqnKXXPG1i3OJtdUDk1Io7E6o1JNzAWO5tEcYq5xY0hFsM5YjH8oJ+I5aBJ6u96X/9sUXUsLi8oUXmJXjAulqgN0ivn4lxorBar8dT+ltSNKS9CrM293tWm+e6N5tnlccVPBeqXAPqSc/k5r50GUzkHvbHbeWhTefUMqse7+rSqvNYqFW7aCvw1y+xLXIGfWAzniMXwg34ilrBYjM5zNlgoV9KVr5XTa8eFVSEqF8YvLd2rxetyrt24FfhrltkXuAI/sRjOEYvhB/1ELGIxZHE4WFQun6Yvd59PQNjpT4wzLKoWaFOnJFdd3LdBK/CXni28j7QV+InFcI5YDD/oJ2IRiyELg8WGaW6tUWIxnCMWww/6iVg0CWRhsNgsDa7ATyxeSMCFkRuGWAw/6Cdi0SSQhcEClojFizR2p5XNRSyGH/QTsWgSyMJgAUsbHosbm5NtImpnmkQshh/0E7FoEsjCYAFLxGJ3RO1Mk4jF8IN+IhZNAlkYLGBJVixW1+moWsUvXQ6wsBhIYd3s0qPJFOEgv6lLspCJ8nJzpi2vhVL+lcqdqT2Ets7QIBbDD/qJWDQJZGGwgCVBsVi7tE3Li9WL9JUKtPUb2TIso6c9b7NEYOWv1FWLKw6BWLyuLaAL6Cdi0SSQhcEClsTE4tJqHNo9AJNUWboXSyGJ1m2kFHuLkbTqRi/FRFv5K/WTKKoOoYWIxfCDfiIWTQJZGCxgSUosNt0fpa62m9CTaO1GSuusLbo7jPoeDm4/XnUILUQshh/0E7FoEsjCYAFLomLx8pnSEIstpjGYX00sdoVYDD/oJ2LRJJCFwQKWpMTiBTfNSCZDaBMr0t8qXMpWtZGmY3HVIbQQsRh+0E/E0ppkFu7t9vdG8+yB6eho+0w//3cQTqMoiqLxIH3ZLNxT7+0cBtlrtI0MCkPpfHjQLz0Ym/R2+71Qeyh/O9eKB2j8Z7h59aSXPzgfHhR3WJL58GDB2Ss1UOURjQdLnatTNSWDBSyJicWl5Rom/Z30P+ovuVNDpt1GlNe6jsUWoVz7pVYu6kYshh/0E7G2oiiKJj1jxDkIx0pgGg+yIKuGQi3oGEOPKRbHeToYl3eoHKyrXumCed802sGaHtz0WFze/7pYrD5eOnv6uTpdUzJYwJKcWBwV5gZryz0UL3PTs6j6cvNGIh+x2LAzysPGQ2hlKiYWwxP6iVhpk0x6al4Jgzju5LlHrQqHQVoa7O+N5lEYbO8Gw3LZNY1E+UayXyz/G0ySEnJpC8UK5a7LynE5FheS37KxeDo6WlNh+7QWxeJZuGdsPlMN2DoWr9CUDBawJCoWd05p5Yx2IBbDD/qJWFmTKBFnPjxIYlD2oFIqLgfH1CzcK1cHixmoUIlU/1N/Kq41hsG2Xl90O6FiuVicFzvNsXg86G/vBsNZk7F42WkhVVNcVqsWr9CUDBawRCxuUEtTMbEYntBPxFKaJEnDar0zyT3ad9/KjAtTyinHLFN4in+xUMgsZ6mjvarJqXHgVjYbR9Jl51rE+1YZJXePhrOKWJzXQYPeQb8Xap8c8o2nHwlqZlnkNVS1Hr97NJwpNddCLb/6WeNEYT19qpl+0ktLtpXzhpWdt55bvExTFjBYwBKxGM4Ri+EH/USsrah6bsPuUW9wtD2YRGGQf98dBr1QryIn8TQJu9WxuPTFuvZewdhYYiztcJ6lknSYvsWp5h9bXG1mVS02BN9Z2FM/XRhmYkRJvM4Pcz4cKbNNim+RHmDts0vF4unoaFuJxaayvXZCVqoWlw6eWIyVEIvhHLEYftBPxKpvEiX35GVF/fH053K2Vl9gqHeWU6x5Qmohe6nJbDzobx+E01lYrkRaKga7JHGq+7bEJIpqhjUZopo0HwbFnK0eY+2zS8TiWbi3G/QG9rG4eKTLzi2uacocgwUsEYvhHLEYftBPxEqapBxqd5MJFXmOKV+btdtXK8cx7T+zzS4IavnjxhJjEn/Lr0krtaeebVw6wHQeSJ47V4jF6lk1xOLqVeqUQnhK+VhS++wSc4vDIJ77YT2JYrlYvGRTphgsYIlYDOeIxfCDfiJWHou1r7mTfKPnnny1inK12BCqii+uWAbObhJFOnN3XbFYmQ0SRVGkzF0+ZSweD/p6tvYYi5eYW2yeyVBTOT7t3OKFTZlisIAlYjGcIxbDD/qJWEvEYuXCO8MkitSCS+4Kt//QLuazmZBaXA0tnURhnLm7WJ7pDZMZ4pOwZCxOXqPNOYkqpnkopVNdeZqEGoXrny1asECb6c4sxjXpSm236txiYjFWQyyGc8Ri+EE/EcsiFge90jSAbAGHBZMoio8o5cbkSj41ZllmqcJyDelbFNbKsJttvNztPAqxeBRsn+lvD0LTbk96ee1ZuyZPi+DF9TQmPXWB58IRFaamVD1bZB2LI2VBvcqwrn14WDkWm8I3gwUsEYvhHLEYftBPxFpibrEimcAaV2rPLJjGYNhIFr92iwu0la/TKv5iOi/W8Lu7wVhdwc1ibYrlVvlVl2HWU2/hA4N+jHHJWbkkrnBJX2naSZL4Q+XtCtcF1jxbtEws1nbGcOu7wnaWveROU1XjZ7CAJWIxnCMWww/6iVjLzC3OZJNis0RomnW6G4zV0Kwmb+W9kmBanmya75KW1RZOI146FltWi+P9ryqj1l1at7y6SRGLni2yicWTpPnUM6bdiiUYm86nYek94+V0SzUlgwUsEYvhHLEYftBPxGphk6RZ3EE8bYrLWLxpGCxgiVgM54jF8IN+IhZNIhGxmMECCxGL4RyxGH7QT8SiSSQiFjNYYCFiMZwjFsMP+olYNAlkYbCAJWIxnCMWww/6iVg0CWRhsIAlYjGcIxbDD/qJWDQJZGGwgCViMZwjFsMP+olYNAlkYbCAJWIxnCMWww/6iVg0CWRhsIAlYjGcIxbDD/qJWDQJZGGwgCViMZwjFsMP+olYNAlkYbCAJWIxnCMWww/6iVg0CWRhsIAlYjGcIxbDD/qJWDQJZGGwgCViMZwjFsMP+olYNAlkYbCAJWIxnCMWww/6iVh5k8zCvTP97ap/B+FU/bUwSB+ZDw/6vbDuLcYD9QWTXpM3Lp70dot7Ox7090bzNb7nLNwrH/Is3NsNxvpj09FR5fk/09/WX7/oxYWDqmwm8+GXds/4MuXBSa9uZ5ZpcQYLWCIWwzliMfygn4ilxeJSUMufso/FcbzWYtmkt6vkp4UhKd5C4R3j362K6XVPGXdbea+qo3YoPqLBJN8N00mYjo7y15S3UI7FVS82pNjlYvF40N8eTNR2r/jwMOklx6U3a/k822OwgCViMZwjFsMP+olYTqrFFqXBSS9OdcbSqbrZmuCbZ+v58EB9Qc1TmdJ+HoTTOP/VFVlXUXrHRWXd9cTi2jqusYmz9yrE4kGwl+5zqfyfxOLi+Sy+2AKDBSwRi+EcsRh+0E/EWrparCbXM/3tQWguQ1Ztza46Ox4Uo+10dKTNIlDidc1TCr1cGsf6MNi2mCqwulKENdduhVSL80cKn5TyD0JHw1nhO4Q8Flu+byUGC1giFsM5YjH8oJ+I5aRaXI6S09HR9kE4Xb5iGivF4vnwoK+nwKxCXPOUqhyLj/aq5hkX5jzE+7PCXIslYvFSc4uXjMVWJz8M4keSuq9hEkU6X2I2H+anhWoxvCMWwzliMfygn4h1yiZRJ48W6sf1YahUoDVmRGMsLue8LBZXPFX9LhWTX/Pwp0z/LVajl7cx1eJZuLd7tHegVItrYrG2G1SL4R2xGM4Ri+EH/USsrWhRndhYsAyD7YNwPDpaLvFk13JpzKtD6LG1XADOisQ1T0XFB0v170K4VBfNSPZhFpaLyjYWlH61s6rk73XG4sXV4jDohfokinIsNs9RoVoM74jFcI5YDD/oJ2JVNcmCiKbEKUMSOlNx4V0aMRcu2WYZi/dG89qnosKDxmqx8l6F0uZ8eODmIjzLGurSsXiJeSmnnVusxeIwuXov38l0s8XdW75InGGwgCViMZwjFsMP+olYapOosawyomUXq9Ut3WVeha0QQJPtm6qPXuYW59tPa9hrisXljOhxbrFxiktt0XpBtViVpeH8fMZLjsQHmF6ctxQGC1giFsM5YjH8oJ+IpTSJNpnBENHUWFaotlpUi6ejI/3BqkJjus3yShTqI4WVKCqeUtjMLdZek2y2fkU5G4YDdFAtThln+q7EIhan+5+exux905cVX7AEBgtYIhbDOWIx/KCfiJU1SZKD0xCzIGAtWS0uZWLzpjLlWGxYnDjfvZqnMpaxON3JykvuJr3l5stWTnRePRZPR0fbu/290WSaxeLZfDyornDrEb+qUYyxWFe4wC79QGW6yct0dLRcuZ3BApaIxXCOWAw/6CdixU2SJb/xICn0LhWLa6vF8VSEyoKrdhFe+eI/NYCqzxb2reapSNmN0iV3xY3E+5kuUqb9bnp+khXcrNamqLu3yEqxOJ4aUbkPxexe+MyTPDibGyeK6FfXmd4iaf3kKNLOMx8eZC9WD1B93AKDBSwRi+EcsRh+0E/E2opKi6bVLEyxezQMi/d2rq0WZzcH1mhJ2sO9l6Ooulqs3ATOYhrxUrG4OLujameWW7YiGIeBTbk6SavFiF/7YvUY058rP/MkJ6HiWE7drAwWsCQlFk/6O1s7/VUnL8l7r04iFsMP+olYNMly0lU4TrnMAhZisIAlYnHlS/aDYJ/4fBrEYvhBPxGLJoEsDBawJCUWLxDH1DW/ifpuSRzOf4I9YjH8oJ+IRZNAFgYLWCIWlwX7yntp/wErxGL4QT8RiyaBLAwWsCQlFue5N9jf2un39+PN7vQnURTsZ29TLN0G+1s7/aC/s7W1tbW1H+SvzV84SZ5NXrDgvaJihZh68fKIxfCDfiIWTQJZGCxgSWQsTgNsPgm4qloc7Gd5Ng7E+S+mP+2noTbYT55e8F6F+jDl4qURi+EH/UQsmgSyMFjAkshYnJVns1JtTSzeUWKv8edSvbj+vYrlYcrFSyMWww/6iVg0CWRhsICllsfiSX8nmx2RbWPBe1EtXhWxGH7QT8SiSSALgwUstTwWK49N+jtW1WK90ux5DYx2IBbDD/qJWDQJZGGwgKUNicXpRAjjJXd1kyjyCRQ7+/t21WJWolgVsRh+0E/EokkgC4MFLEmJxaKwbvFqiMXwg34iFk0CWRgsYIlYbMRd7lZBLIYf9BOxaBLIwmABS8RiOEcshh/0E7FoEsjCYAFLxGI4RyyGH/QTscxNEgbbu0fDWe1vhsH2QTjVHpr0Fv5W0Xx40O+FyX9MR0fbg+L3fuNBv/RGlZuye2VqFu6d6W/b/NsNxmFg9cr4xdnh1L1s2XPVDQwWsEQshnPEYvhBPxGrqkkWhtHxoL83mkdRFM3CvSThlWPxpFfIgsXUq8Xi+D+TzVa+pkIYbO8e7Rl+fUmzcG/X4u1KypnemPJTp/gI0Q0MFrBELIZzxGL4QT8Rq7JJ8rBrpKS6MEjD34KolyfpXDnyTnoLS7PlvJ5l2TDIirWnMx6Us7uVRbG4cKTE4goMFrBELIZzxGL4QT8RayuKovrv+k3f+09HR1k2HQ8qXjyYRNF8eJCH1PGg3wsrXr9SRpz0dvPAre7b0halasPOp8GXWOwGgwUsEYvhHLEYftBPxFKbpOJL/0mvOKlg0stKtrNwL8+RpqiXT0E2BkG7CRIxcwF7Pjwo1neLFd94DrHyyHjQN8XfSe9Mf7t2BkWc7DPqGSMWu8FgAUvEYjhHLIYf9BOxtCbRMm6qdGldciXZQTgtzoswR73kNdnGtQ0qYTGeOJHVfUuX/ZmmN0x6ed5V5yWXsrKytenoyFgSHg/6e6NJvD+m+R7Ja4jF68VgAUvEYjhHLIYf9BOxCk1SioOla+Diku0ojrbz4YGa7aqi3qS32987OKrKr2rQ1HYgrvIehFNjlg0DvbJb3NVCSTi5iLDiiro0wmb7Y17XYoVYXDg5xOIKDBawRCyGc8Ri+EE/EavYJPpEBcM83TDYG81Nq7NFdVGvEGHzsnRtLE4fUVc9UzZYqPiaVrHQDmc+PFCq0QrlMEsLxpUq1qeMxUktPNsasbgCgwUsEYvhHLEYftBPxDI0SZo4qyYbJK85CKfl9dcqrqJL5l3os3uzoqxVLC4n4yLj4m7FF5RjsX6YpbnOYaD+ymkvuYsndQQ9YvFCDBawRCyGc8Ri+EE/EcvYJOrsYbOlqsXxvIVR5QVzFbF4PjzQcud4YK71qpuqicVJSVgvh5euvTNeApgfV6FaXNx+xcpu6buUzo9xMnfHMVjAErEYzhGL4Qf9RCxztXjhumlLxOI8rZqWTqu4nUe8D+WUWXf7vdpYbLzkznAUy6yMoauIxXGJuuJ2J+oyHYsWwegKBgtYkhSLg/2trZ3+aRY8hyjEYvhBPxFLaZJ0RoSaFLOIXAh81rFYv1te4RK9SIuhs3BvN1kL4lQ31KiOxfpEiDSqGsu0p4/FldM/Kq+6y5N0cbGOLmOwgCVBsTjY39oPHGwHTSMWww/6iVhbUXY1WF0gS6ZVZK+xjMXml6VLTBRSeHwxXxRFNbcIqZtkvHBusY1lY7Eyu1o99tJKybFp4c4pytwMYnGCwQKW5MTiSX+HUnE7EIvhB/1ELJpEhDhGM4kiYrCANWIxnCMWww/6iVg0CWRhsIAlObE42GdicUsQi+EH/UQsmgSyMFjAkpBYPOnvMLG4NYjF8IN+IhZNAlkYLGBJSCyOqBa3CLEYftBPxKJJIAuDBSzJicXMLW4NYjH8oJ+IRZNAFgYLWCIWwzliMfygn4hFk0AWBgtYkhOLWbe4NYjF8IN+IhZNAlkYLGBJUCzmLndtQSyGH/QTsWgSyMJgAUuSYjFaglgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxbpJf2drP2h6LzYcsRh+0E/EokkgC4MFLBGLdcRiB4jF8IN+IhZNAlkYLGCpjbE42E/3aqc/KTyylYVeNQAnPysvS38zN+nvbFUkZuUp9VXB/tbWfhBN+juGzbUZsRh+0E/EokkgC4MFLLUuFgf7xUyrP5JkVWMsjkzV4kl/pyIoVzwV7G/t9Cfp/4uIxY1sAV1APxGLJoEsDBaw1LZYnIXRykfS4GsTi+0qxKadMOfojiAWww/6iVg0CWRhsIClTsbinf5k+WqxIQNXPUUsJhbDB/qJWDQJZGGwgKW2xeJ8kkQURUG/PzFMoijNbSjMDV66PKw/Fb9D96ZO5IjF8IN+IhZNAlkYLGCpdbFYqeFqSTVTmCKxtbW1tbO/n4Xh5MHTJlolg6dhuXuLWxCL4Qf9RCyaBLIwWMBSC2OxNMF+x1IxsRie0E/EokkgC4MFLBGL1617qZhYDE/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMVwjlgMP+gnYtEkkIXBApaIxXCOWAw/6Cdi0SSQhcEClojFcI5YDD/oJ2LRJJCFwQKWiMWOBPvJmdjpT5rel6YRt3RgcAAADzxJREFUi+EH/UQsmgSyMFjAUidj8aS/s7UfON5gEoeD/S23295AxGL4QT8RiyaBLAwWsEQsdr0955l78xCL4Qf9RCyaBLIwWMBS62JxnEqD/Xw6Qza9IX4g/8+tnf5EDbH5z4WNBPtbO/3+vrIRXbCvBuFgf2unP1EryF1DLIYf9BOxaBLIwmABS62Mxco0hiSjZk/tB5FW0K2OxfpGtpRnimG3UB8mFhOL4Qf9RCyaBLIwWMBSK2NxnlGV0rBS67WKxeWgm76oFHaN1eIOIxbDD/qJWDQJZGGwgKX2x2JDRF1DLM4fY24xsRie0E/EokkgC4MFLLU8FusLQwT7pdSrTHWY9He2TheL1ddTKyYWwxf6iVg0CWRhsICltsfidJ7w1taWko+Tx7IZFVtbW1tbO/v7p6wWa+9Srj13DrEYftBPxKJJIAuDBSy1LhaLoU847hRiMfygn4hFk0AWBgtYIhavSYdTMbEYntBPxKJJIAuDBSwRi+EcsRh+0E/EokkgC4MFLBGL4RyxGH7QT8SiSSALgwUsEYvhHLEYftBPxKJJIAuDBSwRi+EcsRh+0E/EokkgC4MFLBGL4RyxGH7QT8SiSSALgwUsEYvhHLEYftBPxKJJIAuDBSwRi+EcsRh+0E/EokkgC4MFLBGL4RyxGH7QT8SiSSALgwUsEYvhHLEYftBPxKJJIAuDBSwRi+EcsRh+0E/EokkgC4MFLBGL4RyxGH7QT8SiSSALgwUsEYvhHLEYftBPxKJJIAuDBSwJicWT/s7W1n6w4lYgA7EYftBPxKJJIAuDBSwJicVRFAX75OKWIBbDD/qJWDQJZGGwgCU5sXjS39npT1bfDhpHLIYf9BOxaBLIwmABS8RiOEcshh/0E7FoEsjCYAFLomIxsyjagVgMP+gnYtEkkIXBApbkxOIoioL9LQrGLUAshh/0E7FoEsjCYAFLcmIx1eLWIBbDD/qJWDQJZGGwgCVRsZhScTsQi+EH/UQsmgSyMFjAErEYzhGL4Qf9RCyaBLIwWMCSnFjMusWtQSyGH/QTsWgSyMJgAUtCYjF3uWsTYjH8oJ+IRZNAFgYLWBISi9EmxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoEsDBawRCyGc8Ri+EE/EYsmgSwMFrBELIZzxGL4QT8RiyaBLAwWsEQshnPEYvhBPxGLJoE4jBdYaEux4hbc7hg2GrEYftBPxKJJIA7jBRZy0knoaVCt/lkrolPBDv1ELJoE4jBeYCFiMZyjU8Eb+olYNAnEcVKzQYu56h50M6joV/CDv3GS0SSQiCEDNZzHF3oaHPYEOhXq0UMko1UgFAMHjNx2DLoZYsRieEMPkYxWgVBU8lC2jl5BN8OaPmvRqVBG3xCOhoFc/HWBak39gW7WcXzWgk/0DeFoGIhGZEFsrT2BbtZZ62t6ehTK6BXy0TaQbkvX9O7ANz8dgD7WQXzWgk90iY1A22ADbJk0vVNYL/+NTgfrDj5rwTM6w6agebAxjDkJHdFgH/Pz1vDAf/vSkRDRDTYKLYRN4ipjYYPQzbAmjXQnP28KIWj9jUMjYSP5+ruJxtDBsD4SupPnfYBPtPjmop0AoNI6sxl8oy+hEc12PCyF1gIAwIem4xl8a7rHYWm0GQAAXjWd1rBeTfcvnB6NBwAAABCLAQAAAGIxAAAAEBGLAQAAgIhYDAAAAETEYgAAACAiFgMAAAARsRgAAACIiMUAAABARCwGAAAAImIxAAAAEBGLAQAAgIhYDAAAAETEYgAAACAiFgMAAAARsRgAAACIiMUAAABARCwGAAAAImIxAAAAEBGLAeAUwmB792g4a3o3oiiKounoaHswUR6YDw/6vdDwyvGgv32m9l92UJIOMD6ivdG8+gWT3m7xkMeD+l8BgBJiMQAsazo6EpMayyG4Lharj5fy9KS3obE4DLYPwqn6yCzc2w3Ga98xAO1CLAaADTYL93aD4ejIpgbcxlg8Hx7oB3sQTst18V0qxwAsEIsBYHOVom3UgmrxtD7la1lfP9i4bBwG23qpmAkVAKwQiwF0ThybZuGeGrDy/yxlx/LjSmqcjo70rZkjaSyvYhYDqFL1VCNd/bPRpJfWQSvnDSv7s/zc4qr3Xe9xGWdL67k2S/DlWHy0VzXPOG4jZcvjwYLjAtAtxGIAnRMG2bft+bfwaTzSotIs7KVpTJtPXIjF+dZqktakp7wsiubD0STfmbw0Ox8eKFuofXY6OtpWYnGaBdWkqKXG5arF5fctzN9d63GdPhYbdjKvFpc/zxiOCEBXEYsBdE5hhkAYVFWCdcpyB8V0pbx+FparlVFNCCu8e2ELNc/Owr3doDewj8XFyRWLJlFU79Vaj2v5WFyeW1zYgvp5YDzobx+E04rDAdBpxGIAnVOYe1rIwbNwrxCayxMSaoqO5rw1Hx70S5OATe8eRerUiLpnw6AX5nVQi0kUy8bi6r1a63GtPrc4iqIs/hoOPK5MM9sYQAmxGEDnWMfi8UCNlTXV4iZicZTsYTne1VSOV1i32G8sdjGJYjyI941YDMAOsRhA59jGYj0IFucALBWL1eJleWf016v7U/+sGou13TZNAilUwZedRFExt2RNx6VbsEDbornF2mumo6N0EoWcFegAyEAsBtA59rE4X7ggKTEuFYsLV+/pyyBMegP10rRsC+qbLnq2UC3OVsOozKnaJGCLS+7M7+vhuHSrx+KKayULO8BsY6DjiMUAOsd+brG2iNvSkyhKl6NNevl0BWVNht2jYZi+USEd1j9bnEShbt9w67tCslw8t7jifT0cl27p23losgYNA33uRL78Rb6CG2tTAF1GLAaAJtXfOGPRbTXGg/7eaFJYYy6KlEAfP24KfGksVpKleQm2U1ntuHSnqBZrnxAWTiMmFgOIImIxADTLZXyUZLOOK/4UwSQKoOOIxQDQpM2Kj/baelwAWoxYDABNamt8bOtxAWgxYjEAAABALAYAAACIxQAAAEBELAYAAAAiYjEAAAAQEYsBAACAiFgMAAAARMRiAAAAICIWAwAAABGxGAAAAIiIxQC6ajo62h5MlAcmvYrbEY8H/V64+GUAgM1GLAbQSfPhQb83CvfO9Ler/h2E0+TFk95uf280T39eFItn4Z726/rj8b/dYKw9N+kZ3hcA4BGxGEAXzcK9Yvqsz7uTXhxkZ+FezcvCwJSq06eUR8YDNRmrsXs+PCAZA0ATiMUAOmg8yGJoxm52xCzcKxZ6zdtfEG1n4d5uMjdjOjrSisf1yRsAsCbEYgDdM+mpkbRuBsV8eFA9yyKfEVEM2XaxOM6+8+FBvzTLuZzaAQBrRiwG0DXjQX9bjcVaJI2iqDjhofhUsVo8Hx6o1+Slb1Ebi5UK8Xx4UAjB5UcAAOtHLAbQLbNwbzfoDSyrxUXjQb8Uo/Pas/aymlgcBtv5r5Rrw+X6MQBg/YjFALolDHphvubactXidELwwiXb6mLxLNzTcrA5FlMtBgDfiMUAOmh8qmqxEnaVgq7pCrnKWFzMxBFziwFACmIxgA46RbV4Ojra1uJvOqXYtDaFORZrcyf0LasvZiUKAGgEsRhABy1bLS5lYoUpQxticUUmjqLIsG4xE4sBwD9iMYAOWqZaPB8e9CszceEivFnptnlJFDYt9KZuU/1FMjEANIJYDKCDxoN+L1y0JvHu0XA26Zly6nigvmzx3T0AABuAWAwAAAAQiwEAAABiMQAAABARiwEAAICIWAwAAABExGIAAAAgIhYDAAAAEbEYAAAAiKLovwPvh4iJAfmwvAAAAABJRU5ErkJggg==" alt="" />

static修饰的全局变量 和 全局函数 都不要在对应模块的头文件中声明,因为static是为了隐藏在一个源文件中,而放在头文件中则是为了方便其他源文件使用,这2者显然矛盾了。

下面我们尝试开发一个对int数组排序的库来说明问题。举一反三靠大家自己了。

/*sort.cpp*/

/*
我们使用了2个函数完成排序:1、swap用于交换2个值,bubble_sort则是排序的实现。显然我们只想对其他使用者提供 bubble_sort这一个函数接口,而对外隐藏swap函数。于是将swap修饰为static
*/ #include"sort.h"
static void swap(int &a, int&b);      //static 函数仅仅在自己的源文件声明就够了,不要在头文件中声明。
                                       //为什么  需要在自己的源文件中声明呢?假如将下面的 swap函数和bubble_sort函数定义的位置交换下,那么
//编译器在从上往下解析sort.cpp时,会先看见swap在bubble_sort中的调用,而编译器事先不知道swap的任何声明和外观信息。 static void swap(int &a, int&b)
{
int t = a;
a = b;
b = t;
} void bubble_sort(int arr[], int len)
{
for (int i = ; i < len - ; ++i)
{
for (int j = ; j < len - - i; ++j)
{
if (arr[j]>arr[j + ])
swap(arr[j], arr[j + ]);
}
} }
/*sort.h*/
#ifndef _SORT_H_
#define _SORT_H_
void bubble_sort(int arr[], int len); #endif
#include"sort.h"
#include<iostream> using namespace std; int main()
{
int arr[] = { , , -, , - }; bubble_sort(arr, ); for (size_t i = ; i < ; ++i)
{
cout << arr[i] << endl;
} system("pause");
return ;
}

全局const常量

全局const默认是具有内部链接性,就像使用了static修饰后一样。(C程序员朋友注意,和C++不同,const常量在C中依旧是外部链接性的)

/*test.cpp*/

const int foo = ;

//等价于   static const int foo = 12;

由于const全局常量是内部链接性的,所以我们可以将 const定义放在头文件中,这样所有包含了这个头文件的源文件都有了自己的一组const 定义,由于const为文件内部链接性,所以不会有重定义错误。

/*one.cpp*/
#include"one.h"
/*one.h*/
#ifndef _ONE_H__
#define _ONE_H__
const int x = ;
const int y = ; #endif
#include"one.h"

int main()
{
return ;
}

预处理后

/*one.i */

const int x = ;
const int y = ;
/*main.i*/
const int x = ;
const int y = ; int main()
{ return ;
}

你会觉得这样很不经济,如果这个头文件被包含100次,那岂不是在这100个源文件都定义了这组全局常量?而且全局常量的存活期又很长。当然是有解决办法的。那就是使用extern

改:

/*one.cpp*/
#include"one.h" extern const int x = ;
extern const int y = ;
/*one.h*/
#ifndef _ONE_H__
#define _ONE_H__
extern const int x;
extern const int y; #endif
#include"one.h"

int main()
{ return ;
}

预处理后的文件

/*one.i*/
extern const int x;
extern const int y; extern const int x = ;
extern const int y = ;
/*main.i*/

extern const int x;
extern const int y; int main()
{ return ;
}

但是:在C++中,如果const常量只 和 #define宏那样使用,是不会占用内存的,而是加入编译器的符号常量表中,这就是C++的const常量折叠折叠现象。但有些操作会迫使const存储在内存中,比如对const常量取地址等。因此将const常量直接放在头文件也是OK的,大多数情况也会这样做。

因此,如果两个不同的文件中声明同名的const ,不取它的地址,也不把它定义成extern,那么理想的C++编译器不会为他分配内存,而只是简单的把它折叠到代码中。--《C++编程思想第一卷》

全局函数

C++类 calss 和 结构体struct  中的成员函数受 OOP封装规则限定。这里只谈全局函数:在自定义名称空间中的,以及在全局(::)名称空间中的函数。

全局函数默认都是有外部链接性的。因此,在一个源文件中定义的函数,其他源文件只要有声明,就可以使用。

也可以将全局函数使用static 修饰,使其在定义它的源文件中私有化。此时它和使用static 修饰了的全局变量一样,会隐藏外部链接中同名的全局函数,也不会引起重名错误。

注意:全局inline函数默认是内部链接性,这也就是inline函数为什么可以整体定义放在头文件中的原因了。这点和宏函数一样,宏也是仅仅在一个源文件中有效的。

头文件中放什么?

1、类的定义

2、结构的定义

3、enum的定义

4、内敛函数的定义 和声明。内敛函数整体都放在头文件中。这样包含它的每个源文件才知道怎样展开。

5、函数的声明

6、模板

7、#define 宏 和  const 常量(C++不建议使用宏:宏常量使用const替代,宏函数使用inline函数替代)