Как использовать #define внутри #if?
Мне нужно было определить директиву препроцессора, которая абстрагирует некоторые условия.
Я хочу обнаружить поддержку ввода-вывода файлов платформы.
Поэтому я хочу определить директиву препроцессора, такую как FILE_IO, чтобы определить, поддерживает ли эта платформа или нет.
Мне нужна была директива препроцессора, потому что я не могу использовать файловый api на неподдерживаемых платформах, поэтому мне нужно прекратить использовать их во время компиляции.
Взгляните на приведенный ниже сценарий.
Как я могу этого достичь?
Любая помощь будет оценена по достоинству.
Что я уже пробовал:
// It won't work #define FILE_IO = !SAMSUNG_TV && !WEBGL // OR #if !SAMSUNG_TV && !WEBGL // It get defined anyway #define FILE_IO #endif
0x01AA
а) первое неверно. См., например, #if (ссылка на C#) | Microsoft Docs[^], Unlike C and C++, you cannot assign a numeric value to a symbol; the #if statement in C# is Boolean and only tests whether the symbol has been defined or not
Б) Второй выглядит вполне нормально. Может быть, вам следует сначала убедиться, что он не определен: #undef FILE_IO
#if !SAMSUNG_TC && !WEBGL ....
EmpireWorld
Могу ли я присвоить логическое значение #define?
Могу ли я использовать #define внутри #if?
Dave Kreskowiak
директивы # define вообще не имеют никакого значения. Вы можете только проверить, определены ли они или нет.
0x01AA
В c# вы управляете им независимо от того, существует символ или нет. Нет необходимости назначать bool или любое другое значение.
То, что я знаю, вы можете использовать #define внутри #if.
В вашем случае, я думаю, что FILE_IO уже определен, возможно, не вами. Поэтому убедитесь, что он не определен, прежде чем делать свои тесты:
#undef FILE_IO
#if !SAMSUNG_TV &&! WEBGL
#определение FILE_IO
#endif
... должен это сделать
EmpireWorld
FILE_IO не определен, я хочу определить его в своем собственном коде.
Позвольте мне попробовать #define внутри #if.
0x01AA
Вы написали: "это все равно будет определено". Если это не ваш "#if !SAMSUNG_TV &&! WEBGL", то, скорее всего, он определяется другой частью кода, которую вы используете...
EmpireWorld
Я имел в виду, что #define определяет директиву в любом случае, когда она находится внутри оператора #if is или нет.
0x01AA
Я не понимаю. В любом случае, работает ли вторая версия или нет (возможно, с #undef в качестве первой)? С моей точки зрения, так и должно быть.