C常数

Lak*_*hmi 4 c

如果我宣布一个不变的说法

CI中的"#define MONTHS = 12"意识到预处理器指令将替换使用MONTHS,但是想知道是否将内存分配给存储12 ??,如果是,那将是什么标签以及将是什么数据类型.

Con*_*ler 20

您最有可能希望您的定义如下:

#define MONTHS 12

/* some code here... */

int payAnnual = payMonthly * MONTHS;

要回答您的问题,将不会使用任何内存.预处理器不知道诸如变量和存储器之类的概念.它本质上是一个自动文本编辑器.它将用符号MONTHS替换任何出现的符号.

由于预处理器是如此愚蠢,通常最好使用const变量.这为您提供了类型检查的好处,并且可以使编译器错误更容易阅读.只要你声明它是静态的,变量就会被优化掉.(如果你没有在C中声明一个静态的全局变量,默认情况下,它将被导出,因此编译器无法完全优化它.)

static const int MONTHS = 12;

  • 它被称为PREprocessor - 当你单击`Compile`按钮时,它会在编译*之前通过你的source*,并用MON替换所有出现的MONTHS.在C++中有一个常量意味着你想要将Months公开为一个公共变量,所以其他用户可以访问它并在您提供库时使用它.预处理器定义只对*your*源代码有意义. (3认同)
  • C++编译器可以(并且将会)选择优化const,只要你不做像取其地址那样的事情.但是如果你想问一下C++,那么你最好开始一个更为棘手的问题--C和C++是不同的语言. (2认同)

小智 9

语法实际上是:

#define MONTHS 12
Run Code Online (Sandbox Code Playgroud)

否=允许签名.MONTHS的编译代码中没有分配内存,也没有数据类型.

  • 好吧,我认为这是允许的,但它不会做什么?他打算用它做什么:-). (4认同)

How*_*May 6

预处理器只是对源代码进行符号更改.因此,代码的行为与您自己用12替换所有MONTHS的行为相同.因此,使用它不会对内存产生影响.

使用预编译器定义是提高代码抽象级别的一种很好的方法,而不会影响性能.

问候