#define ArgumentToString(macro) #macro
#define ClangWarningConcat(warning_name) ArgumentToString(clang diagnostic ignored warning_name)
#define WarningClear(warningType, code) \
do { \
_Pragma("clang diagnostic push") \
_Pragma(ClangWarningConcat(warningType)) \
code; \
_Pragma("clang diagnostic pop") \
} while (0)
WarningClear("-Wundeclared-selector", [self performSelector: @selector(areyouok) withObject:@0]);