您的位置:首页 > 编程语言 > C语言/C++

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

2017-12-28 11:06 501 查看

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 %s\n",str,str2,str3);
printf("%s\n","i love android!");
return 0;
}
    (3)测试编译和运行结果





三、##运算符的使用

      (1)
##运算符用于在预编译期粘连两个符号,增大了宏的使用灵活性!
      (2)测试代码
#include <s
4000
tdio.h>

#define NAME(n) int_name##n

int main()
{

int NAME(a);
int NAME(b);

NAME(a) = 520;
NAME(b) = 111;

printf("%d\n", NAME(a));
printf("%d\n", NAME(b));

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: