口碑好网站建设多少钱,深圳wap网站建设,公司网页设计html,wordpress模板怎么安装教程Prefer consts, enums, and inline to #define.
这个条款或许改为“宁可以编译器替换预处理器”比较好#xff0c;因为或许#define不被视为语言的一部分。那正是它的问题所在。当你做出这样的事情#xff1a;
#define ASPECT_RATIO 1.653记号名称ASPECT_RATIO也许从未被编译…Prefer consts, enums, and inline to #define.
这个条款或许改为“宁可以编译器替换预处理器”比较好因为或许#define不被视为语言的一部分。那正是它的问题所在。当你做出这样的事情
#define ASPECT_RATIO 1.653记号名称ASPECT_RATIO也许从未被编译器看见也许在编译器开始处理源码之前它就被处理器移走了。于是记号名称ASPECT_RATIO有可能没进入记号表symbol table内。于是当你运用此常量但获得一个编译错误信息时可能会带来困惑因为这个错误信息也许会提到1.653而不是ASPECT_RATIO。如果ASPECT_RATIO被定义在一个非你所写的头文件内你肯定对1.653以及它来自何处毫无概念于是你将因为追踪它而浪费时间。这个问题也可能出现在记号式调试器symbolic debugger中原因相同你所使用的名称可能并未进入记号表symbol table。
解决之道是以一个常量替换上述的宏#define:
const double AspectRatio 1.653; //大写名称通常用于宏因此这里改变名称写法。作为一个语言常量AspectRatio肯定会被编译器看到当然就会进入记号表内。此外对浮点常量floating point constant就像本例而言使用常量可能比使用#define导致较小量的码因为预处理器“盲目地将宏名称ASPECT_RATIO替换为1.653”可能导致目标码object code出现多份1.653若改用常量AspectRatio绝不会出现相同情况。