【c&c++】C语言宏定义中#符号和##的妙用

C语言宏定义中#符号和##的妙用

一、 宏定义可以包含两个专用的运算符:#和##。编译器不会识别这两个运算符,他们会预处理时被执行。

二、#运算符的用法
(1)#运算符用在预编译时期,用于将宏参数转换为字符串,即是加上双引号。
(2)测试代码

#include <stdio.h>
 
#define PRINT_MACRO_HELPER(x) #x 
#define PRINT_MACRO(x) PRINT_MACRO_HELPER(x) 
#define PRINT_ANOTHER_MACRO(x) #x"="PRINT_MACRO_HELPER(x) 
 
 
#define TOTAL_SAVE_REAL_TIME_PICTURE  502
#pragma message(PRINT_MACRO_HELPER(TOTAL_SAVE_REAL_TIME_PICTURE))
#pragma message(PRINT_MACRO(TOTAL_SAVE_REAL_TIME_PICTURE))
#pragma message(PRINT_ANOTHER_MACRO(TOTAL_SAVE_REAL_TIME_PICTURE))
#pragma message(PRINT_MACRO_HELPER(1256985))
 
 
int main()
{   int i=982366632;
    char *str=PRINT_MACRO_HELPER(1235982536); 
    char *str2=PRINT_MACRO(i); 
    //char *str3=PRINT_MACRO(i); 
    char *str3=PRINT_ANOTHER_MACRO(i); 
    printf("the string of str is %s,the string of str2 is %s ,the string of str3 is %sn",str,str2,str3);
    printf("%sn","i love android!"); 
   return 0;
}
    (3)测试编译和运行结果
【c&c++】C语言宏定义中#符号和##的妙用

三、##运算符的使用
      (1)##运算符用于在预编译期粘连两个符号,增大了宏的使用灵活性!
      (2)测试代码

 

#include <stdio.h>  
   
#define NAME(n) int_name##n  
   
int main()  
{  
      
    int NAME(a);  
    int NAME(b);  
      
    NAME(a) = 520;  
    NAME(b) = 111;  
      
    printf("%dn", NAME(a));  
    printf("%dn", NAME(b));  
   
    return 0;  
}

3)测试运行结果如下, int NAME(a);  int NAME(b); 在经过预处理后这一声明变为:int int_namea;int int_nameb;可以看出,预编译时,宏参数n被替换,并和name连接成一个整体,然后整体替换NAME宏。

【c&c++】C语言宏定义中#符号和##的妙用

 

 

 
 
 

原文链接: https://www.cnblogs.com/opensmarty/p/17108834.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    【c&c++】C语言宏定义中#符号和##的妙用

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/317070

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午2:32
下一篇 2023年2月16日 下午2:35

相关推荐