万千只cnm 发表于 2021-6-24 10:40:59

#define 替换 (字符串内


#include<stdio.h>
#define PINTF(format,value) printf(" "format" \n",value)

int main(){
       
        PINTF("%d",5);
       
        return ;
}
为什么 %d和format要加上“”才能正常输出呢   ,不是直接替换吗

#include<stdio.h>
#define PINTF(format,value) printf(" format\n",value)

int main(){
       
        PINTF(%d,5);
       
        return ;
}
这样都不行

人造人 发表于 2021-6-24 11:01:18

因为format在字符串中,这个format不会被替换

$ cat main.c
//#include<stdio.h>
#define PINTF(format,value) printf(" format\n",value)

int main(){

      PINTF(%d,5);

      return ;
}
$ gcc -E main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"



int main(){

      printf(" format\n",5);

      return ;
}
$

人造人 发表于 2021-6-24 11:03:23

把预处理器的结果输出出来看一下就明白了

$ cat main.c
//#include<stdio.h>
#define PINTF(format,value) printf(" "format" \n",value)

int main(){

      PINTF("%d",5);

      return ;
}
$ gcc -E main.c
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"



int main(){

      printf(" ""%d"" \n",5);

      return ;
}
$

浮华染流年 发表于 2021-6-24 11:04:19

#include<stdio.h>
#define PINTF(format,value) printf(#format" \n",value)
//format在双引号里面是普通文本,用#能把format变成字符串%d
//%d不用加双引号
int main(){
      
      PINTF("%d",5);
      
      return 0;
}

万千只cnm 发表于 2021-6-24 11:16:01

人造人 发表于 2021-6-24 11:03
把预处理器的结果输出出来看一下就明白了

哦哦哦

万千只cnm 发表于 2021-6-24 11:21:54

浮华染流年 发表于 2021-6-24 11:04


谢谢
页: [1]
查看完整版本: #define 替换 (字符串内