2

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

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

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

[myThings count]不工作...

4

1 回答 1

1

定义是文本的文字替换:它会像代码一样工作吗

  [@"A", @"B", @"C" count];

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

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

这应该可行,但我根本不建议使用这种“模式”。

添加

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

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

这是一种 C 常用的方法来了解 .c 中有多少元素arr。再一次,我强调一个事实,myThings实际上被你定义的任何东西所取代#define,所以结果是一样的

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

添加2

请注意,如果您不使用arr“真正”,优化将删除它,并且不会“浪费空间”。

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

于 2012-05-13T17:53:44.237 回答