什么是在objective-c类中定义的c函数的范围?

时间:2010-03-20 15:38:26

标签: c objective-c function scope

当我发现一些有趣的代码时,我正在阅读绕过objective-c的消息以获得性能(与此特定问题无关):

#import <Cocoa/Cocoa.h>

@interface Fib : NSObject { }

- (long long) cFib: (NSUInteger) number;

@end

@implementation Fib

// c implementation of fib
long long cFibIMP(NSUInteger number)
{
  return (number < 3) ? 1 : cFib(number - 1) + cFib(number - 2);
}

// method wrapper for c implementation of fib
- (long long) cFib: (NSUInteger) number
{
  return cFibIMP(number);
}

@end

我的问题是;当使用c函数时,在一个objective-c对象中,c函数(在这种特殊情况下是cFibIMP)放在哪个范围内? objective-c类是否封装了删除name-clash更改的c函数,或者是将c函数简单地转储到整个objective-c程序的全局范围内?

2 个答案:

答案 0 :(得分:4)

这些函数被转储到“全局”范围内。

您可以通过在示例代码的末尾添加一个新类来检查:

@interface Gib : NSObject {}
@end
@implementation Gib
- (void) t
{
    NSLog(@"%d", cFibIMP(10));
}
@end

答案 1 :(得分:1)

C函数具有全局范围。

如果你想拥有类“范围”这样的东西,最好的办法就是使用static关键字,它将函数的范围限制在包含它的源文件中。对于你在这里说明的那种用法,这通常足够接近。