跃2.0 2018-07-14 14:02 采纳率: 40%
浏览 1459
已采纳

这个c语言里宏替换怎么实现啊

宏函数 参数列表是没有要求的,,,可是 传参的时候就会 很麻烦
比如 #define def(i) i=0 非要传入 def(i)这样的才可以,,可是这样参数不就固定死了,或者非要为Int 型 具体请看我代码,怎么把一个字符串变成int型呢,比如只有“ i”又想用这个宏函数怎么写

 #include <string.h>
#include <stdio.h>
#define def(i) i=0
#define set(x,y) x=y
#define print(i) printf("%d",i)
static int def(i);
int main ()
{
    char str[4][20] = {"def i\n","set i 1\n","set i i+1\n","print i\n"};
    char s[2] = " ";
    int j;
    for(j=0; j<4; j++)
    {
        split(str[j],s);
    }

}
void split(char *str ,char *s)
{

    char *token;
    int j=0;
    char *name[5];

    token = strtok(str, s);
    while( token != NULL )
    {
        // printf("%s\n", token );
        name[j]=token;
        //  printf("%s\n",name[i]);
        token = strtok(NULL, s);
        j++;
    }

    if(strcmp(name[0],"def")==0)
    {
     def(name[1]);//这里name[1]就是i 想替换成 def(i);

    }
    else if(strcmp(name[0],"set")==0)
    {
       set(name[1],name[2]);//这里name[1] name[2]也就是i\n,i+1\n想替换 set(i,i+1);
    }
    else if(strcmp(name[0],"print")==0)
    {
        print(name[1]);//这里name[1] 就是一个字符串i\n  想替换 成 print(i);
    }

}

  • 写回答

6条回答 默认 最新

  • threenewbee 2018-07-14 14:36
    关注

    你这个没法办到,因为宏的替换是在编译的阶段完成的,而name[1]是在运行的时候才被求值,才知道是“i”
    你的宏的替换根本没有机会被执行到。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误