是否有一个 C 宏可以替换文件中的可变长度 functions/strings(正则表达式)?
Is there a C macro that replaces varied length functions/strings (regex) in file?
我希望能够:
#define DEBUG_MODE 1
为了打开和关闭我所有代码中的 printf()
函数调用。如果这样设置,我知道该怎么做:
if (DEBUG_MODE) printf("Hello World\n");
但是,这需要先见之明并逐行设置。
宏中是否存在或可以构建可以用空字符串(或您可能想要的任何其他内容)替换给定表达式(如 printf();
)的查找和替换功能?
#define DEBUG_MODE replace("printf(some_regular_expression);", ""); // where "" is empty string
我敢肯定这是不可能的,更不用说正则表达式了,但是问问也无妨。
虽然这样的野兽可以通过各种恶作剧来建造,但我强烈建议不要这样做。它在标准 C 中不可用,您的 IDE 会讨厌您。
典型的方法是将 debug_printf
之类的东西定义为 printf
(或最近,fprintf(stderr, ...)
)或扩展为空的宏。
我建议容忍额外的间接级别并继续编写
#include <stdio.h>
#include <stdarg.h>
void debug_printf(const char *fmt, ...)
{
#if !defined(DEBUG)
if (loglevel < LOG_DEBUG) return;
#endif
va_list ap;
va_start(ap, &fmt);
vfprintf(stderr, fmt, ap);
}
其中loglevel
是一个全局变量,LOG_DEBUG
是一个宏,都是你自己定义的。这个想法是您可以通过将参数传递给程序来在运行时重新启用这些语句。如果在调试打印中投入了大量工作,这通常很有用。
完成后,您可以使用 IDE 搜索和替换一次来更新您的正则表达式匹配的所有呼叫站点。
我希望能够:
#define DEBUG_MODE 1
为了打开和关闭我所有代码中的 printf()
函数调用。如果这样设置,我知道该怎么做:
if (DEBUG_MODE) printf("Hello World\n");
但是,这需要先见之明并逐行设置。
宏中是否存在或可以构建可以用空字符串(或您可能想要的任何其他内容)替换给定表达式(如 printf();
)的查找和替换功能?
#define DEBUG_MODE replace("printf(some_regular_expression);", ""); // where "" is empty string
我敢肯定这是不可能的,更不用说正则表达式了,但是问问也无妨。
虽然这样的野兽可以通过各种恶作剧来建造,但我强烈建议不要这样做。它在标准 C 中不可用,您的 IDE 会讨厌您。
典型的方法是将 debug_printf
之类的东西定义为 printf
(或最近,fprintf(stderr, ...)
)或扩展为空的宏。
我建议容忍额外的间接级别并继续编写
#include <stdio.h>
#include <stdarg.h>
void debug_printf(const char *fmt, ...)
{
#if !defined(DEBUG)
if (loglevel < LOG_DEBUG) return;
#endif
va_list ap;
va_start(ap, &fmt);
vfprintf(stderr, fmt, ap);
}
其中loglevel
是一个全局变量,LOG_DEBUG
是一个宏,都是你自己定义的。这个想法是您可以通过将参数传递给程序来在运行时重新启用这些语句。如果在调试打印中投入了大量工作,这通常很有用。
完成后,您可以使用 IDE 搜索和替换一次来更新您的正则表达式匹配的所有呼叫站点。