Есть ли инструкция препроцессора для сбоя сборки XCode?

#ios #c #xcode #c-preprocessor

#iOS #c #xcode — код #c-препроцессор

Вопрос:

Есть ли инструкция препроцессора для сбоя сборки XCode? (или pragma_mark или что-то еще)

Например, я разрабатываю приложение для 3 разных сред, включая несколько веб-URL для извлечения. Пока я не знаю URL-адрес, который будет использоваться для производственной среды, и я хочу вставить инструкцию в свой код, чтобы предотвратить ожидаемую сборку от запуска в этой среде.

Мой код выглядит так

 #ifdef ENV1
...
#endif

#ifdef ENV2
...
#endif

#ifdef ENV3
#some_instruction_that_prevent_success_build
...
#endif
 

Другими словами, мне нужна инструкция, которая действует как блокирующее задание.

Комментарии:

1. Ошибка #работает нормально, но почему это должна быть инструкция препроцессора? Вы могли бы использовать @@@ TODO так же просто.

2. Мои 2 проблемы заключаются в том, что я хочу, чтобы проект компилировался и запускался для ENV1 и ENV2 и завершался сбоем только для ENV3, и если сообщение об ошибке может быть настроено на то, которое я установил, а не на общую ошибку. Например, используя @@@ TODO, вы получите сообщение «Проблема с синтаксическим анализом — неожиданный «@» в программе», которое может напугать клиента.

Ответ №1:

Директива препроцессора ошибок — это то, что вам нужно.

 #error "Danger, Will Robinson!"
 

Комментарии:

1. Это работает… но, похоже, это просто потому, что это неизвестная инструкция препроцессора. 🙂 Какой-нибудь хороший онлайн-ресурс, который порекомендует документацию по всем инструкциям предварительной обработки?

2. Я абсолютно уверен, что #error является известной инструкцией препроцессора — она задокументирована в препроцессоре GCC C ( cs.utah.edu/dept/old/texinfo/cpp/cpp.html#SEC37 ).

3. @Dirty Henry: посмотрите, что компилятор сообщает вам, когда видит эту директиву при попытке компиляции.

4. @Dirty Henry: #error является частью стандарта C. ( #warning однако это не так.) Если вам нужен список директив препроцессора, получите копию K amp; R или копию стандарта ( open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf )

5. #error определяется в разделе 6.10.5 стандарта ISO C 1999 года. Это также входит в стандарт ANSI 1989 года, поэтому ваш компилятор будет поддерживать его, если только он не очень старый (а если он настолько старый, у вас есть другие проблемы). Его преимущество в том, что компилятору не разрешается выполнять работу, если #error директива не пропущена с помощью #if , #ifdef , или #ifndef ; для любых других ошибок компилятор может выдать предупреждение и продолжить.