请与我们分享您最喜欢的,最常见的PRINT或DEBUG宏 适用于不同类型的所有(或几乎所有)变量以及C中的数组。宏 可以有任意数量的参数(虽然1-3是首选);如果它增加 描述能力,可以假设C99特征。
#define PRINT(var, ...) \
...
我们开始吧!
答案 0 :(得分:1)
对于C ++,模板函数可以比宏更强大。
template <typename T>
std::string tostring(const T& t);
模板参数的缺点是它无法区分typedef别名:
typedef LONG HRESULT;
对于C,我认为在没有改变你的结构的情况下你无能为力。如果你可以控制结构定义,这里有两个技巧:
在结构的开头添加一个字段,并将该字段设置为唯一标识结构类型的值,tostring
函数可以使用该值来选择适当的打印代码。
typedef struct abcde
{
int unique_struct_type_id; // assign this to a number that represents "abcde"
};
类似的方法是传入一个函数指针来打印结构。
struct abcde
{
void (*print_fn) (abcde* p); // assign this to the printing function for "abcde"
}
#define PRINT_STRUCT(s) s->print_fn(s)