预编译时宏替换 见解

在预编译的过程中  主要处理#  和宏替换

例如

#include<stdio.h>
#define  PI  3.14

int main(){

double  r=3, s;
s=r*r*PI;
printf("%f\n",s);
return 0;
}  

在预编译的时候   代码变成如下

#include<stdio.h>

int main(){

double  r=3, s;
s=r*r*3.14;
printf("%f\n",s);
return 0;
}  

#define  PI  3.14  不开辟空间  不要求类型  只将源码中所有的PI 替换成3.14

#include<stdio.h>
#define int int*
int main(){

int p;
return 0;
}

上面这段代码在预编译的时候将所有int  替换为int *    主函数返回类型为指针型   p为指针变量

宏定义带参时

#include<stdio.h>
#define SUM(x,y)(x*y)
int main(){
int a=3,b=4;
int c=SUM(a+5,b+6);
//预编译时替换为  int c=SUM(a+5*b+6)
printf("%d\n",c);
return 0;
}

输出  c=29

#include<stdio.h>
#define MAX (x,y)((x)>(y)?(x):(Y))
int main(){

int a=10,b=5;
MAX(++a,b);
printf("%d",a):
return 0;

输出  a=12;

原文地址:https://www.cnblogs.com/lc-bk/p/11069799.html

时间: 2024-08-04 10:31:40

预编译时宏替换 见解的相关文章

Unity3D 多平台_预编译相关宏定义

预编译 原文地址:http://docs.unity3d.com/Documentation/Manual/PlatformDependentCompilation.html 平台定义     UNITY_EDITOR 编辑器调用. UNITY_STANDALONE_OSX 专门为Mac OS(包括Universal,PPC和Intelarchitectures)平台的定义. UNITY_DASHBOARD_WIDGET Mac OS Dashboard widget (Mac OS仪表板小部件

android源码编译时拷贝替换指定文件

由于要做版本定制,某些版本的资源文件等(例如style.xml)需要不同的配置,但是android的编译开关无法在xml里使用,于是想到了编译时根据不同的编译开关编译不同的文件,如下: 1.建立A.xml文件,当编译开关OEM_CUSTOMER_SUPPORT=22时编译将该文件拷贝到指定目录. 建立B.xml文件,当编译开关OEM_CUSTOMER_SUPPORT不等于22时,将该文件拷贝到指定目录. 2.编写拷贝脚本文件myDefine.sh,内容为: #!/bin/bash#if [ $O

C预编译, 预处理, C/C++头文件, 编译控制,

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征.依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的. 其格式一般为: #Pragma Para 其中Para 为参数,下面来看一些常用的参数. (1)message 参数. Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输

Android首次启动时间长优化之预编译提取Odex

提示!应用程序的安装有两种情况,第一:首次启动系统时安装:第二:系统启动完成后安装.本篇博文基于第一种安装场景.在系统首次启动的场景中,系统会对/system/app./system/priv-app./data/app目录下的所有APK进行dex字节码到本地机器码的翻译,同样也会对/system/framework目录下的APK或者JAR文件,以及这些APK所引用的外部JAR,进行dex字节码到本地机器码的翻译.这样可以保证除了应用之外,系统中使用Java来开发的系统服务,也会统一地从dex字

mybatis深入理解之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe

mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = "ruhua"; 上述 sql 中,我们希望 name 后的参数 "ruhua" 是动态可变的,即不同的时刻根据不同的姓名来查询用户.在 sqlMap 的 xml 文件中使用如下的 sql 可以实现动态传递参数 name: select * from user whe

ASP.NET 动态编译、预编译和 WebDeployment 项目(转)

概述 在 Web 服务器上,既可以部署源文件,也可以部署编译后程序集. 若部署源文件,则当用户访问时,Web 应用程序会被动态编译,并缓存该程序集,以便下次访问. 否则,若部署程序集,Web 应用程序能直接使用. 动态编译 本文针对 VS 2008.Web 应用程序要想为请求提供服务,ASP.NET 必须首先分析 Web 应用程序的代码,并将其编译成一个或多个程序集.当编译代码时,会将代码编译为 Microsoft 中间语言(MSIL,与具体编程语言和 CPU 无关的语言).运行时,MSIL 将

个人对JavaScript预编译的理解

什么是js的预编译 马上要找工作了,之前学习JS都是很基础的皮毛,作为当前最火热的语言,本人一定是要研究的,然而刚接触到预编译我就快疯了,对于一个脑子不好使的人来说真的太绕了,饶了好久也不知道有没有绕明白,所以先记载下来,以后发现有啥不对的再纠正. 首先,JS解释器在执行一段script脚本时,首先会进行预编译,将代码中声明的变量和函数进行处理,然后才会按代码顺序翻译执行,那么JS在预编译和执行阶段分别进行了些什么操作呢?网上有很多大神的帖子给了说明: 1. 在执行代码前会进行类似"预编译&qu

87)PHP,PDO的预编译技术

(1) 比如以下的语句: 1 insert into biao1 values('李宁','100'): 2 insert into biao1 values('安踏','100'): 3 insert into biao1 values('匹克','100'): 4 insert into biao1 values('乔丹','100'): 5 insert into biao1 values('耐克','100'): 6 insert into biao1 values('阿迪','100'