“符号”在“加载符号列表”中的含义是什么?

时间:2010-07-21 20:30:24

标签: c# c++ symbols

“符号”在“加载符号列表”中的含义是什么?或者在MSDN的这个例子中:

“#if允许你开始一个条件指令,测试一个或多个符号,看它们是否评估为真。”

这些符号的定义和声明在哪里?

3 个答案:

答案 0 :(得分:6)

“符号”是计算机科学中相当广泛(且过载/模糊)的术语。维基百科有一篇关于它们的文章:Identifier/Symbol/Token

但是,在您的情况下,您正在查看预处理器(预编译器)指令,这会影响编译结果。

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

一样使用
#if DEBUG

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

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

答案 1 :(得分:2)

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

对于#if,“符号”表示预处理器(c ++)或有条件定义的(C#)符号。 C#没有预处理器阶段,所以这些术语可能有点令人困惑。

使用#define定义条件符号:#define WIN32您可以使用#if:#if WIN32< ...>来测试是否定义了符号#endif

预处理程序符号是无类型的,通常不与实际属于程序代码的类型和标识符相交。预处理器位于源代码“上方”。编译器输出中不存在预处理程序符号,并且在运行时不占用任何内存空间。从逻辑上讲,编译器从未看到预处理器语法 - 它在文本到达编译器之前被删除。

答案 2 :(得分:0)

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

/尤