请与我们分享您最喜欢的,最通用的,打印或调试宏
适用于不同类型的所有(或几乎所有)变量和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)

10-07 22:00