Sus*_*nna 2 c arrays global-variables objective-c extern
在我的MyConstants.h文件中...我有:
int abc[3];
Run Code Online (Sandbox Code Playgroud)
在我匹配的MyConstants.m文件中...我有:
extern int abc[3] = {11, 22, 33};
Run Code Online (Sandbox Code Playgroud)
在我的每个其他*.m文件中...我有
#import "MyConstants.h"
Run Code Online (Sandbox Code Playgroud)
在我的viewDidLoad {}方法中,我有:
extern int abc[];
NSLog(@"abc = (%d) (%d)", abc[1], sizeof(abc)/sizeof(int));
Run Code Online (Sandbox Code Playgroud)
为什么显示"abc =(0)(3)"而不是"abc =(22)(3)"?
如何按预期工作?
的extern需要是在声明在报头,而不是在源文件中的定义.extern告诉编译器该符号存在于其他地方,它可能在同一个翻译单元中,也可能不在同一个翻译单元中.链接器的工作是确保实际定义所有声明的符号.
常量标题(MyConstants.h):
extern int abc[3];
Run Code Online (Sandbox Code Playgroud)
常量Source(MyConstants.m):
int abc[3] = {11, 22, 33};
Run Code Online (Sandbox Code Playgroud)
其他来源(SomeFile.m):
#include "MyConstants.h"
...
- (void) someMethod
{
NSLog (@"abc = (%d) (%d)", abc[1], sizeof(abc)/sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)
此外,请注意测量阵列的大小时,它是容易出错的由所述第一元件的尺寸来划分少,因此,如果类型abc的变化(即,从int至double),结果仍然是有效的.
- (void) someMethod
{
NSLog(@"abc = (%d) (%d)", abc[1], sizeof(abc)/sizeof(abc[0]));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |