Да, это возможно, но, вероятно, не делает то, что вы думаете. Директивы препроцессора интерпретируются до компиляции результатов этапа предварительной обработки.
Это означает, что все директивы препроцессора интерпретируются, переопределяя некоторые макросы до того, как будет скомпилирован оставшийся код, который будет выглядеть примерно так, как показано ниже.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
}
else {
}
Другими словами, после предварительной обработки у вас просто есть пустые 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;
}