如何计算#define中的元素

时间:2012-05-13 17:42:56

标签: objective-c cocoa nsstring c-preprocessor

如何在宏定义中获取元素数量,如下所示:

#define myThings @"A",@"B",@"C",@"D",@"E"

从myThings获得答案5的方法是什么?

[myThings count]不起作用......

1 个答案:

答案 0 :(得分:1)

定义是文本的字面替换:它是否适用于像

这样的代码
  [@"A", @"B", @"C" count];

?如果答案是否定的,它就不会起作用,那么这就是你的问题。你可以做到

  [[NSArray arrayWithObjects: myThings, nil] count];

这应该可行,但我不建议使用这种"模式"一点都不。

添加

计算有多少值的另一种方法可能如下:

  NSString *arr[] = {myThings};
  size_t cnt = sizeof(arr)/sizeof(NSString *);

这是了解arr中有多少元素的常用方法。我再次强调,myThings 字面取代了您使用#define定义的任何内容,因此结果与

相同
  NSString *arr[] = {@"A", @"B", @"C", @"D", @"E"};

<强> ADD2

请注意,如果您不能使用arr&#34;进行真实&#34;,优化会删除它,并且没有&#34;浪费空间&#34 ;

但是,另一种解决方案是计算传递给宏的参数数量,以便将CountingMacro(myThings)替换为5. This SO answer在这种情况下可能有所帮助。