书上的一段话不理解,关于多个文件中常量定义的问题
这是Primer上的一段
“
在程序编译期间,在可能的情况下 ,符号常量的值会代替该名字的出现。 这个替代过程
被称为常量折叠 (constant folding )。例如, 当 INLINE 被用在一个文件中时 ,编译器用 128
代替名字 INLINE。
为了使编译器能够用一个常量值替换它的名字 ,该常量的定义 (它的初
始值 )必须在它被使用的文件中可见。因为这个原因 符号常量可以在同一程序的不同文件
中被定义多次。 尽管理想情况下, 一个具有初始值的常量可以被包含在多个不同的文件中 。
但是常量折叠使其变得并不必需 ,甚至在可执行文件只要出现一次就行。”
根据这段文字,我的理解是:
因为要实施常量折叠--->常量的初始值必须在使用它的文件中可见---->常量必须在每个使用它的文件中定义----->C++语法允许常量在不同文件中多次定义
也就是说,因为要实现常量折叠,所以要在每个用到常量的文件里定义一次
但最后一句又说“常量折叠使其变得并不必需 ,甚至在可执行文件只要出现一次就行。”
而且,第一句开头就说了,常量折叠是“在程序编译期间”。既然是在编译期间,那和可执行文件就没多大关系了吧,为什么要在可执行文件中出现一次。
“
在程序编译期间,在可能的情况下 ,符号常量的值会代替该名字的出现。 这个替代过程
被称为常量折叠 (constant folding )。例如, 当 INLINE 被用在一个文件中时 ,编译器用 128
代替名字 INLINE。
为了使编译器能够用一个常量值替换它的名字 ,该常量的定义 (它的初
始值 )必须在它被使用的文件中可见。因为这个原因 符号常量可以在同一程序的不同文件
中被定义多次。 尽管理想情况下, 一个具有初始值的常量可以被包含在多个不同的文件中 。
但是常量折叠使其变得并不必需 ,甚至在可执行文件只要出现一次就行。”
根据这段文字,我的理解是:
因为要实施常量折叠--->常量的初始值必须在使用它的文件中可见---->常量必须在每个使用它的文件中定义----->C++语法允许常量在不同文件中多次定义
也就是说,因为要实现常量折叠,所以要在每个用到常量的文件里定义一次
但最后一句又说“常量折叠使其变得并不必需 ,甚至在可执行文件只要出现一次就行。”
而且,第一句开头就说了,常量折叠是“在程序编译期间”。既然是在编译期间,那和可执行文件就没多大关系了吧,为什么要在可执行文件中出现一次。
...全文
相关推荐
c语言常量定义规则知识点总结
c语言常量定义规则 常量的定义:常量是指在程序运行过程中其值不能被改变的量。 C语言中常量可分为直接常量和符号常量。 直接常量是指直接用具体数据表达的一种形式,直接常量又分为整型常量、实型常量、字符常量和字符串常量; 符号常量则是指用C语言标识符定义的常量。 整型常量就是整常数,10进制数、8进制数和16进制数三种。如:10、012、0x0A 实型常量也称为浮点型常量。如:3.14 、 1.2E-4 字符型常量必须用单引号括起来。如:’M’ , ‘\n’ 字符串常量应用双引号括起来。如:”abc” , “a” 符号常量可以用宏定义表示也可以用const关键字表征。如:#define PI 3.
定义/取消定义常量:定义和取消定义常量变量而不使用全局变量-matlab开发
这两个函数定义和取消定义变量常量,如#define C 中的预处理器命令。 没有使用全局变量。 在 R2006b 上测试查看每个文件的帮助
C语言中const定义常量
本文章是关于C语言中const定义常量 。
定义CC++全局变量常量几种方法的区别
本文详细介绍了C++程序中的全局变量的声明、引用以及如何在头文件中定义全局变量
define宏定义和const常量定义之间的区别
define宏定义和const常量定义之间的区别。



