[英]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.