宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 5724|回复: 1

习语言宏定义中的‘#’、‘##’操作符和‘...’、‘ __变参__ ’

[复制链接]
  • TA的每日心情
    开心
    2020-6-5 22:17
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    xiyuyan 发表于 2011-9-28 23:51:56 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    一、‘#’
    在宏函数的替换部分,#符号用作一个预处理运算符,它可以把参数的实际值转换成字符串。
    例如:
    如果‘甲’是一个宏参数,那么‘#甲’就是一个字符串,表示实际参数值的名字串,即把实际参数名转化成相应的字符串。该过程称为参数字符串化.
    代码如下:

    #包含 “习语言系统.接口”

    #定义 平方(x) 格式输出(#x "的平方是 %整。%行",(x)*(x))

    整数类型 主函数(整数类型 参数个数, 字符类型* 参数[] )
    {
      整数类型  年龄 = 12;
         平方(年龄);
         平方(1+2+4);
      返回 0;
    }  

    输出如下:
      年龄的平方是 144。
      1+2+4的平方是 49。

        这里:第一次调用宏时使用“年龄”代替#x;第二次调用时用“1+2+4"代替#x。

    二、‘##’
    ‘##’运算符可以用在宏函数的替换部分,把两个语言符号组合成单个语言符号,如一个参数经组合成为另一个变量或函数名 。
    例如:
    #定义  广东车牌( 号码 )  粤A##号码

    这样宏调用:
    广东车牌( 123456 )
    展开后就是:
    粤A123456

    程序:

    #包含 “习语言系统.接口”

    #定义  广东车牌( 号码 )  “粤A##号码”
    #定义  输出变量( 编号 )  格式输出(“变量%整= %整%行”,编号,变量##编号 )

    整数类型 主函数(整数类型 参数个数, 字符类型* 参数[] )
    {
    整数类型  变量1= 11, 变量2= 22;     
    格式输出( “车牌=%串%行”, 广东车牌( 888888) );
    输出变量(1);
    输出变量(2);
      返回 0;
    }   

    输出:

    车牌=粤A##号码
    变量1= 11
    变量2= 22

    由输出可见,车牌由于有双引号,没有展开, 可见##符号在双引号内不起作用。

    后面的输出变量宏的 参数 1,2 经连接后被转换为变量的名字:变量1, 变量2。



    假如我想用宏输出像上面的例子里的:粤A123456 这样的串改怎么做呢? 看下面例子:

    #包含 “习语言系统.接口”

    #定义  广东车牌( 号码 )  粤A##号码
    #定义  串化名字( X ) #X
    #定义  串化车牌( 车牌 ) 串化名字( 车牌 )

    #定义  输出变量( 编号 )  格式输出(“变量%整= %整%行”,编号,变量##编号 )

    整数类型 主函数(整数类型 参数个数, 字符类型* 参数[] )
    {
    整数类型  变量1= 11, 变量2= 22;     
    格式输出( “车牌=%串%行”, 串化车牌(广东车牌(888888)) );
    格式输出( “车牌=%串%行”, 串化名字(广东车牌(888888)) );
    输出变量(1);
    输出变量(2);
      返回 0;
    }   

    这次输出如下:

    车牌=粤A888888
    车牌=广东车牌(888888)
    变量1= 11
    变量2= 22

    可见本次输出使用

    串化车牌 宏时, 其参数 广东车牌(888888) 先进行了展开,得到:粤A888888, 然后串化,作为字符串输出。

    在使用

    串化名字 宏时, 其参数 广东车牌(888888) 没有进行展开,直接进行串化,作为字符串输出。



       此例演示了宏参数展开时的展开法则:

      1、当宏替换部分存在 ‘#’ 或 ‘##’ 时, 宏参数不进行展开, 直接按宏参数字面进行字符串化或连接操作。

      2、当宏替换部分不存在 ‘#’ 或 ‘##’ 时,宏参数假如是宏,先进行宏展开。


    三、变参宏 ‘...’和‘ __变参__ ’
    变参宏定义中参数列表的最后一个参数为省略号(也就是三个点)。预定义宏‘__变参__’被用在替换部分中,以表示替换发生时省略号代表的内容。
    例如:

    #包含 “习语言系统.接口”

    #定义  宏输出(...)  格式输出(“输出=>”  __变参__ )

    整数类型 主函数(整数类型 参数个数, 字符类型* 参数[] )
    {   
    宏输出( “你好%行”);
    宏输出( “小明年龄=%整”,10 );
        返回 0;
    }  

    运行输出如下:
    输出=>你好
    输出=>小明年龄=10

    省略号只能代替最后面的宏参数。

    #定义  变参宏(甲,乙,...)     正确
    #定义  变参宏(甲,...,乙)     错误



    注:以上示例使用习语言编译工具编译。

    该用户从未签到

    msoex 发表于 2012-9-28 22:15:53 | 显示全部楼层
    国内新星影视网站,爱播影视网以百度影音为基干,提供免费、高清网络视频服务的中小型专业网站。爱播影视网的内容丰富多元,涵盖电影、电视剧、综艺、纪录片、动画片等热门剧目;视频播放清晰流畅,作界面简单友好,真正为用户带来“悦享品质”的观映体验。521aibo.com/dsj/
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2025-5-7 09:17 , File On Powered by Discuz! X3.49

    快速回复 返回顶部 返回列表