繁体   English   中英

定义宏预期表达问题

[英]Define macro expected expression issues

我想创建一个宏来修剪我的字符串。

我使用下面的代码进行修剪:

[[NSString stringWithString:string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]

但是,如果我按如下方式创建宏,则会出现错误:预期表达式

#define TRIM_STRING(string) ([[NSString stringWithString:string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]])

如何正确创建相同的定义宏?

作为宏:

#define TRIM_STRING(string) [(string) stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]

但是,真的没有理由不在这里使用内联 function。 你得到类型检查,编译器会给你有意义的错误信息。 与内联 function 相同:

NSString * NSStringTrim(NSString *string)
{
    return [string stringByTrimmingCharactersInSet:
            [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

或者,更好的是,为此在 NSString 上创建一个类别:

@interface NSString (additions)

- (NSString *)stringByTrimmingWhitespace;

@end

@implementation NSString (additions)

- (NSString *)stringByTrimmingWhitespace
{
    return [self stringByTrimmingCharactersInSet:
            [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

@end

这样你就可以获得命名空间,你可以通过这样做来调用它

[string stringByTrimmingWhitespace]

这与 Cocoa 更整洁、更一致。

摆脱你的开始和结束括号。 你一对太多了。

然后摆脱“ NSString stringWithString:string ”并将其替换为string 这本身就是错误的,因为你没有把它放在括号里,但它是学术性的; 无论如何你不需要复制字符串。

编辑:

这是一个好主意,因为您对宏的论点在括号中,所以无论它在宏中出现在哪里,都将其放在括号中。 这可以避免在预处理器扩展宏时出现问题(如果您将复杂的表达式指定为参数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM