代码中#的用法,比较宽泛,主要集中在预编译阶段,写入代码中可能会编译不过去。简单记录一下接触过的几种用法。
1.声明编译命令,比如#include <stdio.h>, #error, #pragma once
2.变量转字符串,比如#define VAR_TO_STR(var) #var ,这个宏定义的目的就是把传入的var,转化为对应的字符串输出,还可以拼凑,比如#define VAR_TO_STR(var) “Hello”#var ,这个宏定义的目的就是把传入的var,转化为对应的字符串,并链接在“Hello”的后面组成一个字符串整体输出
3.连接变量名称,比如#define VAR_TO_NEWVAR(str) p##str ,这个宏定义的目的就是把传入的str对应变量前面加入p,组成一个新的变量输出,其中##不能在定义的两端
4.定义变量, 比如#define FILE_SIZE (5*1024*1024) ,定义变量FILE_SIZE的值为5*1024*1024
写一个简单的例子:
// test.c
/*
gcc test.c -o helloworld
*/
#include <stdlib.h>
#include <stdio.h>
#define VAR_TO_STRING(var) #var
//#define VAR_TO_STRING2(var) p#var // compile error
#define VAR_TO_STRING2(var) "p"#var
//#define VAR_TO_VAR(str) ##str // compile error
#define VAR_TO_NEWVAR(str) p##str
int main(int argc, const char *argv[]){
const char *pHello = "HelloNative";
const char *Hello = "HelloString";
printf("\nVAR_TO_STRING(Hello)=%s\n", VAR_TO_STRING(Hello));
printf("\nVAR_TO_STRING2(Hello)=%s\n", VAR_TO_STRING2(Hello));
printf("\nVAR_TO_NEWVAR(Hello)=%s\n", VAR_TO_NEWVAR(Hello));
return 0;
}