唐老大

来源:互联网 发布:sql sever 视图创建 编辑:程序博客网 时间:2024/04/26 12:19

在c语言中,有两个容易被忽略的操作符,分别是#和##。先介绍#符号的作用,下次再介绍##号的作用。

1.#运算符用于在预处理期将宏参数转换为字符串

2.#的转换的作用是在预处理期完成的,因此只在宏定义中有效

3.编译器并不知道#的转换作用

下面开始举例:

#include <stdio.h>

#define STRING(x) #x

int main()
{
   
    printf("%s\n", STRING(Hello world!));
    printf("%s\n", STRING(100));
    printf("%s\n", STRING(while));
    printf("%s\n", STRING(return));

    return 0;
}

下面我们单步编译一下:gcc -E 1.c -i 1.i 得到下面结果

 

通过#号的作用我们可以动态的知道调用的函数名字

#include <stdio.h>

#define CALL(f, p) (printf("Call function %s\n", #f), f(p))
  
int square(int n)
{
    return n * n;
}

int func(int x)
{
    return x;
}

int main()
{
    int result = 0;
   
    result = CALL(square, 4);
   
    printf("result = %d\n", result);
   
    result = CALL(func, 10);
   
    printf("result = %d\n", result);

    return 0;
}

编译的结果如下所示: