从C语言中的宏函数返回一个字符串,可以通过以下方法实现: 使用字符串字面量: 代码语言:c 复制 #include<stdio.h> #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) #define CONCAT(a, b) a##b #define CONCAT_EXPAND(a, b) CONCAT(a, b) #def
在C语言中,可以使用宏定义来定义字符串常量。宏定义字符串的基本语法如下: c #define STRING_MACRO "This is a string macro" 在这个例子中,STRING_MACRO是一个宏标识符,它会被替换为文本"This is a string macro"。 3. 示例代码 以下是一个简单的示例代码,演示了宏定义字符串的用法: c #include <...
#include "string.h" #include "stdlib.h" #define DEBUG #ifdef DEBUG #define PRINT_DEBUG(fmt, ...) printf(fmt, ##__VA_ARGS__) #else #define PRINT_DEBUG(fmt, ...) #endif int main() { int v = 10; char value[] = "达帮主"; PRINT_DEBUG("%s\n",value); system("pause"); r...
C语言宏(macro)小技巧 目录 字符串化运算符(stringizing operator) 记号粘贴运算符(token-pasting operator) 二选一选择器宏(mux) 字符串化运算符(stringizing operator)# 运算符 # 在宏中会将实参直接转化为字符串literal,也就是字符串常量,举个简单的例子: #define arg2str(p) #p puts(arg2str(666));...
我稍微讲解下宏的一些语法问题(说语法问题似乎不妥,macro只与preprocessor有关,跟语义分析又无关): 1. 宏可以像函数一样被定义,例如: #define min(x,y) (x 但是在实际使用时,只有当写上min(),必须加括号,min才会被作为宏展开,否则不做任何处理。
$ gcc -E macro.c 宏的定义 通过#define指令定义一个宏。 #defineNAME_OF_MACRO value 比如,以下代码定义了一个名为BUFFER_SIZE的宏,指代1024这个数字。 #defineBUFFER_SIZE1024 使用时, foo = (char *) malloc (BUFFER_SIZE); 使用预处理器编译: ...
#define MUL(x, y) ((x) * (y)) 这样的话,上述例子就被展开成为 int ret = ((2 + 3) * (4)); 从而保证了运算的顺序与期望的顺序一致。 符号#和## #符号把一个宏参数直接转换为字符串,例如 #define STRING(x) #x const char * str = STRING(test); ...
define TO_STRING1( x ) #x TO_STRING首先会将x全部展开(如果x也是一个宏的话),然后再传给TO_STRING1转换为字符串,现在你可以这样: const char *str = TO_STRING( PARAM( ADDPARAM( 1 ) ) );去一探PARAM展开后的样子。 一个很重要的补充:就像我在第一点说的那样,如果一个像函数的宏在使用时没有出...
我稍微讲解下宏的一些语法问题(说语法问题似乎不妥,macro只与preprocessor有关,跟语义分析又无关): 1. 宏可以像函数一样被定义,例如: #define min(x,y) (x 但是在实际使用时,只有当写上min(),必须加括号,min才会被作为宏展开,否则不做任何处理。
如果使用macro机制的话,可以通过预编译和macro机制一次性处理上述的问题。 例如:在文件msgdef.h中 1 #ifndef _MSGDEF_H_ 2 #define_MSGDEF_H_ 3 #undefUSEMACRO 4 #ifdefined(INCLUDE_AS_ENUM)//判断预编译宏的设置情况,判断是转换成enum还是string ...