c++中的编译顺序问题!!!

c++中是不是先将头文件拷贝到有main()函数的源文件中,优先编译这个源文件?
其它的源文件先不管?

还有,希望回答问题回答完整,不要就只回答了一句以后就不管了。这样答了和没答一样。

#include
#include

#define NO_ASSIGN(T) T(const T& rhs); \
T& operator= (const T& rhs);
using namespace std;

class String {
struct Srep;
Srep *rep;
public:
class Cref;

class Ran......<br/><strong>答案就在这里:</strong><a target='_blank' rel='nofollow' href='http://blog.csdn.net/sweetdark/article/details/8018599'>c++顺序编译问题</a><br/>----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

没有顺序的,
展开include,和宏的步骤叫预编译,
之后每一个源文件会编译成二进制待重定位文件。(windows上是.lib,linux上是.o)
然后连接器会连接每个上述文件为二进制可执行文件(windows上是.exe,linux是elf文件),并进行重定位。

推荐你看看《程序员的自我修养——编译,连接,装载与库》


首先你所说的是静态链接,静态链接器主要完成两个任务:
1>符号解析:目标文件定义和引用符号.符号解析的目的在于将每个符号引用和一个符号定义联系起来.
2>重定位:编译器和汇编器生成从地址零开始的代码和数据节.链接器通过把每个符号定义和一个存储器位置联系起来,然后修改所有对这些符号的引用,使得他们执行这个存储位置,从而重定位这些节.

  1. 头文件一般只包含声明,(这是惯例,貌似标准没有强制规定)
  2. 一般头文件第一行都要写重复包含的预处理。
    vc++的预处理器有 #program once,要跨平台用

     #ifndef XXX 
     #define XXX
    
     #endif
    
  3. 如果头文件包含了定义,是会出现符号重复定义的。
    不过还要看该符号是强符号还是弱符号了。具体规则我推荐的那本书上都有说。