The Ultimate Print Statement

Some of the most useful functions of the Foundation classes in Cocoa that are not often well known are the functions that convert from non-objects to NSString.  Vincent Gable extended code from Dave Dribin's blog post to create a function that prints an expression and its evaluation, no matter the type. This macro is a must-have for your Objective-C/C++ debugging toolkit, and replaces all print statements.

#define echo(_X_) do{\
	__typeof__(_X_) _Y_ = (_X_);\
	const char * _TYPE_CODE_ = @encode(__typeof__(_X_));\
	NSString *_STR_ = VTPG_DDToStringFromTypeAndValue(_TYPE_CODE_, &_Y_);\
	if(_STR_)\
		MBLog(@"%s = %@", #_X_, _STR_);\
	else\
		MBLog(@"Unknown _TYPE_CODE_: %s for expression %s in function %s, file %s, line %d", _TYPE_CODE_, #_X_, __func__, __FILE__, __LINE__);\
}while(0)