C语言中宏的使用(#,##,do…while(0)宏)
1.预定义宏的使用__FILE__,__FUNCTION__,__LINE__。
#include <stdio.h> void fun(void) { char v1; short v2; int v3; long v4; printf("v1: %x\n",&v1); printf("v2: %x\n",&v2); printf("v3: %x\n",&v3); printf("v4: %x\n",&v4); printf("file is :%s,\tfunction is: %s,\tline is :%d\n",__FILE__,__FUNCTION__,__LINE__); } int main() { fun(); printf("file is :%s,\tfunction is: %s,\tline is :%d\n",__FILE__,__FUNCTION__,__LINE__); return 0; }
2.#宏字符串化
#include<stdio.h> #define dprintf(expr) printf("<main>%s=%d\n",#expr,expr) int main() { int x=100; int y=2; dprintf(x/y);//#expr相当于x/y expr是x/y的运算结果 #是字符串化操作 dprintf(x+y); dprintf(x+y+2); return 0; }
3.##连接字符串
#include<stdio.h> #define test(x) test ##x void test1(int a) { printf("Test 1 integer: %d \n",a); } void test2(char *s) { printf("Test 2 String: %s \n",s); } int main () { test(1)(100); //test(1)等价于test; test##1等价于test1;##连接字符 test(2)("hello"); return 0; }
4.do...while(0)宏
#include<stdio.h> #define hello(str) do{ printf("Hello:%s\n",str); }while(0) int main() { int m=0; if(m) { hello("hello true"); } else hello("hello false"); system("pause"); return 0; }