请与我们分享您最喜欢的,最通用的,打印或调试宏
适用于不同类型的所有(或几乎所有)变量和C中的数组
可以有任意数量的参数(尽管首选1-3个);如果参数增加
描述性的力量,C99的特点可以假设。
#define PRINT(var, ...) \
...
开始吧!
最佳答案
对于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)