jch*_*ard 21 static struct constants objective-c extern
这是一个新手C/Objective-C问题:-)
假设我想要一个CGRectOne和一个CGRectTwo常量.
我该怎么说呢?
谢谢,Jérémy
jus*_*tin 51
其他答案很好 - 在某些情况下 - .
A)声明它将static为每次翻译发出一份副本.如果它只对一个翻译可见(即它的定义在你的.m / .c文件中),那就没问题了.否则,您最终会在每个翻译中包含/导入带有静态定义的标头.这可能会导致二进制文件膨胀,并且会增加构建时间.
B)const CGRect CGRectOne = {...};将在声明的范围内发出符号.如果这恰好是多个翻译可见的标题,则最终会出现链接错误(因为CGRectOne多次定义 - 例如每个.c / .m文件一次,直接或间接包含定义常量的标题).
既然您已经了解了使用这两个声明的上下文,那么请extern试试.这种extern方式允许您:
该extern方法非常适合在多个文件中重用常量.这是一个例子:
File.h
// the declaration in the header:
extern const CGRect CGRectOne;
Run Code Online (Sandbox Code Playgroud)
File.c /米
// the definition:
#import "File.h"
const CGRect CGRectOne = { { 0.0f, 0.0f }, { 1.0f, 1.0f } };
Run Code Online (Sandbox Code Playgroud)
注意:省略const它只会使它成为一个全局变量.
小智 21
有几种选择.有了C89,
const CGRect CGRectOne = { { 0.0f, 0.0f }, { 1.0f, 1.0f } };
Run Code Online (Sandbox Code Playgroud)
有了C99,
const CGRect CGRectOne = {
.origin.x = 0.0f,
.origin.y = 0.0f,
.size.width = 1.0f,
.size.height = 1.0f
};
Run Code Online (Sandbox Code Playgroud)
要么
const CGRect CGRectOne = {
.origin = { .x = 0.0f, .y = 0.0f },
.size = { .width = 1.0f, .height = 1.0f }
};
Run Code Online (Sandbox Code Playgroud)
像这样的东西
static CGRect CGRectOne = (CGRect){.origin.x = 1.0f, .origin.y = 1.0f, .size.width = 1.0f, .size.height = 1.0f};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10791 次 |
| 最近记录: |