2010-07-21 113 views

回答

2

对于“加载符号列表”,符号是在编程语言的语法的定义的元素。局部变量名称是一个符号。类类型标识符是一个符号。 PDB文件包含符号信息,因此调试器可以知道事情的存在以及原始源代码中的名称。

对于#if,“符号”表示预处理器(C++)或条件定义(C#)符号。 C#没有预处理器阶段,所以这些术语可能会有点混乱。 #define WIN32你测试一个符号是否使用#如果定义:#if WIN32 < ...>#endif

预处理符号是无类型的,一般不与相交类型和

你语言中使用#define定义条件符号标识符实际上是程序代码的一部分。预处理器位于源代码的“上方”。预编译符号不存在于编译后的输出中,并且在运行时不占用任何内存空间。从逻辑上讲,编译器从不会看到预处理器的语法 - 在文本到达编译器之前将其删除。

+1

'PDF文件包含符号信息...“我想你的意思是'PDB文件...' – 2010-07-22 01:01:28

+0

Doh!很好的接收。固定。谢谢。 – dthorpe 2010-07-22 16:49:27

6

“符号”在计算机科学中是一个相当广泛的(和超负荷/模糊的)术语。维基百科上有一篇文章:Identifier/Symbol/Token

但是,在你的情况,你正在寻找预处理器(预编译器)指令,这些指令会影响编译的结果。

#if的情况下,“符号”只是一个变量;一个这样的“符号”是DEBUG其可用于这样的:

#if DEBUG 

如果代码被下调试模式编译“调试”符号将评估为true - 因此在这些情况下#if块中的代码将被发送给编译器。

您也可以使用#define创建一个符号,并且(或多或少)将其值设置为true。因此,未定义的符号评估为false,而定义的符号评估为true

+0

我想你的意思是_DEBUG,如果你使用MSVS的默认值。 – Hitobat 2010-07-21 20:42:23

+0

可能取决于C++ vs C# – STW 2010-07-21 20:42:50

+1

至少在C++中,'#define X'后跟'#if X'会导致语法错误,因为'X'被扩展为没有标记。需要'#ifdef X'或'#if defined X'来测试符号是否被定义。要直接使用'#if'指令来测试它,它必须扩展到其他一些令牌,例如'1'。 – 2010-07-21 21:34:32

0

您也可以添加自己的符号以用于代码或移除内置符号。如果您使用Visual Studio,请在您的项目的“属性”下执行此操作,然后在“构建” 如果您不使用Visual Studio,我会怀疑在编译程序时将这些符号添加到命令行中。

/尤