• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++预处理和多重替换

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 预处理概念
 #include
 #defineextern

一、 预处理概念
    
    在源代码编译成机器指令之前,都要进行预处理。
预处理阶段一般会在编译之前处理和修改C源代码。完成预处理后预处理指令就会在源代码中删除,然后才开始编译阶段。
   注:预处理操作发生在编译之前。它们会修改程序语句,但不会被编译执行。
二、#include
   #include<file.h>  //表示在默认路径中搜索file.h 并用file.h里的内容替换 #include<file.h>
   #include"file.h"  //表示在当前目录里搜索file.h 并用file.h里的内容替换 #include"file.h"
三、#define
   #define filenaeme "test.txt" //在预处理时 用"test.txt" 替换所有filename  并且删掉此行
   #deinfe pi 3.1415926       //在预处时  用3.1415926 替换所有 pi        并且删掉此行
四、 extern
   extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(另外,在C++中extern也可用来进行链接指定。)

如在a.c中定义过全局变量 int a要在hello.c中引用全局变量a则要作如下定义:
extern int a;   
   仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。 

如在a.c中定义过全局函数 int add(int a,int b)要在hello.c中引用函数add则要作如下定义:
extern int add(int,int);   
   仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。 

 

教学内容: 
 宏替换
 看起来像函数的宏
 多行上的预处理指令
 结合两个宏展开式的结果
 容易范错的宏

 
一、 宏替换
      支持参数替换的#define指令,我们一般称为宏指令。它也属于预处理指令。
      例:
       #define print_int(i)  printf("%d\n",i)
            
二、 看起来像函数的宏
       #define add(a,b)    a+b
       #define mul(a,b)    a*b
       
三、 多行上的预处理指令
    #define add(a,b)  \
     a+b
    #define mul(a,b)  \
     a*b

 
四、 结合两个宏展开式的结果
    int my1=111;
    int my2=222;
    #define cat(a,b) a##b
   
   printf("%d,%d",cat(my,1),cat(my,2));
 
五、容易范错的宏
    #define mul(a,b)    a*b
    mul(5,3-2) //按照一般的理解应该是5*(3-2)=1 实际上替换展开后是 5*3-2=13
   修改
    #define mul(a,b)    ((a)*(b))

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
查表胡牌判断算法c++日文胡牌算法资料JAVA发布时间:2022-07-13
下一篇:
C#-datagridview设置列宽发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap