这可能是一个棘手的问题,但也许有人可以提供一些见解。
我在一份标题文件中界定了一些全球变量(即我知道有坏,但这只是一种假设情况)。 我将这一标题档案列入两个来源档案,然后汇编成两个物体档案。 《守则》没有提及全球标志。
如果来文方档案为C,那么它就象汇编者那样将全球符号和所有链接混为一谈,而没有错误。 如果来文方档案为C++,其符号就列入两个物体档案,然后我发现链接错误。 C++ 当我包括头盔时,我正在使用“C”一词。
我正在使用2005年版的微软编辑。
我的守则是:
Header file (test.h):
#ifndef __TEST_H
#define __TEST_H
/* declaration in header file */
void *ptr;
#endif
C. 结 论 资料来源:档案。
测试1.c
#include "test.h"
int main( ) {
return 0;
}
测试2.c
#include "test.h"
C++ 资料来源:档案。
测试1.cpp
extern "C" {
#include "test.h"
}
int main( ) {
return 0;
}
测试2.cpp
extern "C" {
#include "test.h"
}
对C而言,物体档案类似:
Dump of file test1.obj
File Type: COFF OBJECT
COFF SYMBOL TABLE
000 006DC627 ABS notype Static | @comp.id
001 00000001 ABS notype Static | @feat.00
002 00000000 SECT1 notype Static | .drectve
Section length 2F, #relocs 0, #linenums 0, checksum 0
004 00000000 SECT2 notype Static | .debug$S
Section length 228, #relocs 7, #linenums 0, checksum 0
006 00000004 UNDEF notype External | _ptr
007 00000000 SECT3 notype Static | .text
Section length 7, #relocs 0, #linenums 0, checksum 96F779C9
009 00000000 SECT3 notype () External | _main
00A 00000000 SECT4 notype Static | .debug$T
Section length 1C, #relocs 0, #linenums 0, checksum 0
String Table Size = 0x0 bytes
而对于C++,他们看着这样的情况:
Dump of file test1.obj
File Type: COFF OBJECT
COFF SYMBOL TABLE
000 006EC627 ABS notype Static | @comp.id
001 00000001 ABS notype Static | @feat.00
002 00000000 SECT1 notype Static | .drectve
Section length 2F, #relocs 0, #linenums 0, checksum 0
004 00000000 SECT2 notype Static | .debug$S
Section length 228, #relocs 7, #linenums 0, checksum 0
006 00000000 SECT3 notype Static | .bss
Section length 4, #relocs 0, #linenums 0, checksum 0
008 00000000 SECT3 notype External | _ptr
009 00000000 SECT4 notype Static | .text
Section length 7, #relocs 0, #linenums 0, checksum 96F779C9
00B 00000000 SECT4 notype () External | _main
00C 00000000 SECT5 notype Static | .debug$T
Section length 1C, #relocs 0, #linenums 0, checksum 0
String Table Size = 0x0 bytes
我注意到,在我汇编C资料来源时,“接收器”被列为“紧急应急中心”,在我汇编C++来源时加以界定,造成联系错误。
我的理解是,这不是在现实生活中做的一件好事,我只是想理解为什么情况不同。
感谢。