首页 > 系统相关 >#define 定义的明示变量就是在预处理阶段用标识符后面的值替换标识符,因此不会占据内存

#define 定义的明示变量就是在预处理阶段用标识符后面的值替换标识符,因此不会占据内存

时间:2023-09-25 14:58:18浏览次数:34  
标签:SUM 替换 内存 标识符 预处理 define

1. 常考:预处理阶段只进行文本替换,不进行运算
对于最后一条,预处理指令定义的标识符都不会占据内存。预处理指令也称预编译指令,即在编译之前进行一些处理,而预处理做的其实就是文本替换,这个过程也叫做宏展开,即用宏定义后面的替换体将程序中出现宏的地方替换掉。
例如,#define 定义的明示变量就是在预处理阶段用标识符后面的值替换标识符,因此不会占据内存。例如,上面程序中将在预处理阶段将 printf("%d\n%s\n", A1, S1); 替换成 printf("%d\n%s\n", 300, "Hello, World");
在这个文本替换过程中需要注意的一点是,#define 只执行文本替换,不执行计算!这个考点在各种笔试中都经常碰到。例如:

// 例2.
#include<stdio.h>
#define SUM 3+4
int main()
{
int a = SUM * SUM;
printf("%d\n", a);
return 0;
}
————————————————

 

2. 运行结果是 19,而不是 49。因为预处理阶段预处理器将 SUM 替换成 3+4,经过预处理之后的程序为 int a = 3 + 4 * 3 + 4;,在运行阶段程序才进行计算,此时根据运算符优先级,先算 * 的部分,因此 a 的值为 3+12+4,即 19。
版权声明:

 

本文为CSDN博主「柚咖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40395874/article/details/120911036

标签:SUM,替换,内存,标识符,预处理,define
From: https://www.cnblogs.com/mljqqh/p/17727922.html

相关文章

  • Uncaught TypeError: Cannot read properties of undefined (reading 'form')问题的解
    问题描述使用vue3执行数据添加操作时,发现了这个错误,使用测试按钮拿文本框数据,一直报错拿不到:问题解决原来是vue2在执行这个操作时:里面放this.form;而vue3在执行这个操作时,里面放的却是:form......
  • 解决 undefined function bcdiv()问题
    在Deepin中php7.2遇到问题:UncaughtError:Calltoundefinedfunctionbcdiv()1bcdiv函数的作用(点我查看)原因是因为缺少了PHP的bcmath扩展,导致电脑无法识别该函数。解决办法:1、查看当前php版本PHP-v12、更新源Centos下:sudoyumupdate1Ubuntu或Deepin下:sudoapt-get......
  • 告警日志出现"which is different from the number of indexes 4 defined in the MySQ
    问题描述:告警日志出现"whichisdifferentfromthenumberofindexes4definedintheMySQL"报错,如下所示:数据库:MySQL5.7.211、告警日志########################################ErrorDetail########################################23092121:30:00[ERROR]Tablet......
  • error C2065: “CV_DATA_AS_ROW”: 未声明的标识符
    ce_dect\main_face.cpp(117):errorC2065:“CV_DATA_AS_ROW”:未声明的标识符将“CV_PCA_DATA_AS_ROW”改为PCA::DATA_AS_ROW即可。PCA::PCA(InputArraydata,InputArraymean,intflags,intmaxComponents=0)该构造函数的参数1为要进行PCA变换的输入Mat;参数2为该Mat......
  • Uncaught TypeError: Cannot read properties of undefined (reading 'type') from e
    DON'Tusereforreactivetowraptheechartsinstance.UseacommonvariableorshallowReftoavoidthedeepwatchforechartsinstance.不要使用ref或reactive来包装echarts实例。使用公共变量或shallowRef来避免对echarts实例的深度监视。<template><d......
  • vue3 defineEmits的使用
    1.计数器案例父组件:<template><h2>当前计数为:{{counter}}</h2><HelloWorld@add1="add1"@decre1="decre1"></HelloWorld></template><scriptsetup>import{ref}from'vue'import......
  • 09_预处理 内存分区
    预处理内存分区全局变量:​ 不初始化默认为0​ 作用范围:当前源文件和其他源文件都有效​ 存储区域:全局区局部变量​ 不初始化值不确定静态局部变量​ 作用范围:所在{}​ 生命周期:整个进程​ 存储区域:全局区​ 不初始化默认为0静态全局变量​ 作用范围:......
  • 使用Object.defineProperty() 定义对象属性时,如已设置 set 或 get, 就不能设置 writab
    使用Object.defineProperty()定义对象属性时,如已设置set或get,就不能设置writable和value中的任何一个了,不然会报如下错误。TypeError:Invalidpropertydescriptor.Cannotbothspecifyaccessorsandavalueorwritableattribute,#<Object>  letobj_tes......
  • 已解决TypeError: type numpy.ndarray doesn‘t define __round__ method
    已解决TypeError:typenumpy.ndarraydoesn’tdefineroundmethod文章目录报错问题解决方法声明报错问题之前在工作中遇到过这个坑,记录一下问题以及解决方法,不一定针对所有情况都能用,但是可以供大家参考。问题描述如下:TypeError:typenumpy.ndarraydoesn’tdefineroundm......
  • 基于weka的数据库挖掘及数据预处理
    基于weka的数据库挖掘及数据预处理关于作者作者介绍......