Jon*_*nah 4 objective-c conditional-compilation ios c-preprocessor
是否可以#define在"if"语句中使用?以下代码有效,但我收到一条警告,即宏正在重新定义.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
#define TableViewHeight 916
#define DisplayHeight 1024
#define DisplayWidth 768
}
else {
#define TableViewHeight 374
#define DisplayHeight 480
#define DisplayWidth 320
}
Run Code Online (Sandbox Code Playgroud)
我也试过这个,但它没有用:
#ifdef UIUserInterfaceIdiomPad
#define TableViewHeight 916
#define DisplayHeight 1024
#define DisplayWidth 768
#else
#define TableViewHeight 374
#define DisplayHeight 480
#define DisplayWidth 320
#endif
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
是的,这是可能的,但它可能没有你想的那样做.在编译预处理步骤的结果之前解释预处理程序指令.
这意味着所有的预处理程序指令都被解释,重新定义了一些宏,然后编译剩余的代码,如下所示.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
}
else {
}
Run Code Online (Sandbox Code Playgroud)
换句话说,在预处理之后,你只有空if和else身体.
如果你想在运行时根据条件更改某些东西的值,那么某些东西必须是一个真正的对象,而不仅仅是一个预处理器宏.例如
extern int TableViewHeight; // defined somewhere else
extern int DisplayHeight; // defined somewhere else
extern int DisplayWidth; // defined somewhere else
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
TableViewHeight = 916;
DisplayHeight = 1024;
DisplayWidth = 768;
}
else {
TableViewHeight = 374;
DisplayHeight = 480;
DisplayWidth = 320;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7917 次 |
| 最近记录: |