相关疑难解决方法(0)

#define宏用于C中的调试打印?

尝试创建一个宏,可以在定义DEBUG时用于打印调试消息,如下面的伪代码:

#define DEBUG 1
#define debug_print(args ...) if (DEBUG) fprintf(stderr, args)
Run Code Online (Sandbox Code Playgroud)

如何用宏实现这一目标?

c c-preprocessor

196
推荐指数
7
解决办法
18万
查看次数

关于宏参数的Foreach宏

我想知道是否有可能在宏参数上编写宏foreach.这是想做的事情:

#define PRINT(a) printf(#a": %d", a)
#define PRINT_ALL(...) ? ? ? THE PROBLEM ? ? ? 
Run Code Online (Sandbox Code Playgroud)

可能的用法:

int a = 1, b = 3, d = 0;
PRINT_ALL(a,b,d);
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所取得的成就

#define FIRST_ARG(arg,...) arg
#define AFTER_FIRST_ARG(arg,...) , ##__VA_ARGS__     
#define PRINT(a) printf(#a": %d", a)
#define PRINT_ALL PRINT(FIRST_ARG(__VA_ARGS__)); PRINT_ALL(AFTER_FIRST_ARG(__VA_ARGS__))
Run Code Online (Sandbox Code Playgroud)

这是一个递归宏,这是非法的.另一个问题是stop condition递归.

c c++ macros foreach

11
推荐指数
3
解决办法
2万
查看次数

创建variadic宏/方法,打印所有变量名称和值

现有的宏在我的应用程序中获得可变数量的变量.
我希望,使用此宏,按name=value格式打印这些变量.

这是一个小例子:

#define EXISTING_MACRO(...) < ??? >

int main()
int a = 0;
int b = 1;
int c = 2;

EXISTING_MACRO(a,b,c);
Run Code Online (Sandbox Code Playgroud)

输出应该是:

a=0, b=1, c=2
Run Code Online (Sandbox Code Playgroud)

我已经尝试通过从宏中调用可变参数模板函数来做到这一点,并且我确实成功打印了变量值,但不是变量名称.(#x打印它们的地址,即使它没有,它可能只显示方法变量名称,'f'):

#define SHOW(a) std::cout << #a << "=" << (a)

template<typename TF>
void write_err_output(std::ostream& out, TF const& f) {
    out << f << std::endl;
}

template<typename TF, typename ... TR>
void write_err_output(std::ostream& out, TF const& f, TR const& ... rest) {
    out << SHOW(f) << " "; …
Run Code Online (Sandbox Code Playgroud)

c++ macros variadic-templates variadic-macros

2
推荐指数
1
解决办法
361
查看次数