if-else后面一定要带上{}

今天遇到一个坑
在 用Xtrace 分析MJRefresh代码的时候,由于对NSLog进行宏定义

#define NSLog(FORMAT, ...) fprintf(stderr,"\nfunction:%s line:%d content:%s\n", __FUNCTION__, __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);

然而

 for ( int l=0 ; l<levels ; l++ ) {

        if ( !swizzledClasses[aClass] && !exists( excludedClasses, aClass ) ) {
            unsigned mc = 0;
            const char *className = class_getName(aClass);
            Method *methods = class_copyMethodList(aClass, &mc);

           for( unsigned i=0; methods && i<mc; i++ ) {
                const char *type = method_getTypeEncoding(methods[i]);
                const char *name = sel_getName(method_getName(methods[i]));
                [nameStr appendFormat:@"%s", name];

                if ( ((includeMethods && ![self string:nameStr matches:includeMethods]) ||
                      (excludeMethods && [self string:nameStr matches:excludeMethods])) )
                   ;//NSLog( @"Xtrace: filters exclude: %s[%s %s] %s", mtype, className, name, type );

                else if ( (excludeTypes && [self string:[NSString stringWithUTF8String:type] matches:excludeTypes]) )
                    NSLog( @"Xtrace: type filter excludes: %s[%s %s] %s", mtype, className, name, type );

                else if ( name[0] == '.' ||
                         [nameStr isEqualToString:@"description"] || [nameStr hasPrefix:@"_description"] ||
                         [nameStr isEqualToString:@"retain"] || [nameStr isEqualToString:@"release"] /*||
                         [nameStr isEqualToString:@"dealloc"] || [nameStr hasPrefix:@"_dealloc"]*/ )
                    ; // best avoided

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
                else if ( aClass == [UIView class] && [nameStr isEqualToString:@"drawRect:"] )
                    ; // no idea why this is a problem...
#endif

                else if (params.includeProperties || !class_getProperty( aClass, name ))
                    [self intercept:aClass method:methods[i] mtype:mtype depth:depth];

               [nameStr setString:@""];
            }

            swizzledClasses[aClass] = YES;
            free( methods );
        }

        aClass = class_getSuperclass(aClass);
        if ( !--depth || aClass == nsObject || aClass == nsObjectMeta ) // don't trace NSObject
            break;
    }

上面这段代码 每个if-else 后面没有大括号{},会出现问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • if 语句 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代...
    副班长国伟阅读 133评论 0 1
  • 宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可...
    你好自己阅读 1,061评论 0 5
  • 写在前面 在开发过程中很多时候需要阅读第三方源码,但是里面有大量的宏。没有换行,没有着色,与平时写的代码完全不同,...
    走进科学阅读 759评论 0 2
  • if-else if-else语句的语法格式为: 语法说明: 1、 else if是else和if两个关键字,中间...
    张轻舟阅读 18,617评论 0 0
  • 转载自OneV's Den 的宏定义的黑魔法 - 宏菜鸟起飞手册 讲的太详细了,就像老师一样,不是在讲方法,而是在...
    厨子阅读 551评论 0 0