“符号”在“加载符号列表”中的含义是什么?或者在MSDN的这个例子中:
“#if允许你开始一个条件指令,测试一个或多个符号,看它们是否评估为真。”
这些符号的定义和声明在哪里?
答案 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,我会怀疑在编译程序时这些符号被添加到命令行。
/尤