C++符号的范围

roy*_*ure 7 c++ scope symbols

AFAIK,符号可用于防止多次解析.如果ah和bh都包含ch,a

#ifndef C_H
#define C_H
...
// c.h definition would go here
...
#endif
Run Code Online (Sandbox Code Playgroud)

将不止一次地阻止ch被"解析"(我相信这不是正确的词).

但是,我见过类似的东西

#ifdef WIN32
...
Run Code Online (Sandbox Code Playgroud)

在其他人的代码中.该符号必须已在其他地方定义,因为搜索

#define WIN32
Run Code Online (Sandbox Code Playgroud)

在整个项目中返回空.我的问题是:这些符号实际定义在哪里?操作系统是否保留了类似于不同程序可用于查询操作系统或其他进程属性的符号池的内容?

Cyb*_*ran 5

有两种选择,其中不在代码中的那些可以源自:

  1. 当您开始编译代码时,编译器套件本身将其设置为默认值.
  2. 在编译代码时(或IDE项目首选项执行,当您使用IDE时),您可以为编译器(或准确的预处理器)提供这些定义的列表.例如,在Visual Studio 2013中,您将在打开项目>属性>配置属性> C/C++>预处理器>预处理器定义).

通常,这些定义不仅用于您描述的原因(包括保护),还用于根据您开发的平台启用或禁用代码 - 例如,您可以只为Windows编译代码分支,或者仅如果您使用的是64位编译器.