Отключение расширений компилятора Xcode

#c #xcode #macos

#c #xcode #macos

Вопрос:

Как я могу отключить расширения компилятора, используя C в Xcode? Я уже пытался найти это в разделе Схемы. Но не нашел его там.

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

1. Используйте -std=c 17 опцию компилятора (или более раннюю стандартную версию, если вы предпочитаете). Понятия не имею, есть ли для этого флажок в графическом интерфейсе, но кого это волнует? Просто передайте правильный параметр, и вы должны получить стандартное поведение.

Ответ №1:

https://www.learncpp.com/cpp-tutorial/configuring-your-compiler-compiler-extensions/comment-page-1/#comment-446983

Для тех, кто спрашивает о Xcode, вот как добавить флаги компилятора:

  1. В Xcode нажмите CMD 1, чтобы отобразить навигатор проекта.
  2. В навигаторе проектов щелкните по вашему проекту, тому, у которого есть синий значок файла.
  3. В главном окне редактора выберите целевой файл.
  4. Нажмите на Настройки сборки.
  5. Убедитесь, что выбраны «Все» и «Объединенные».
  6. Введите «флаг c » в фильтре поиска.
  7. Теперь вы должны увидеть настройку «Другие флаги C » под заголовком «Пользовательские флаги компилятора».
  8. Дважды щелкните справа от этой строки. Появляется небольшое окно.
  9. Нажмите кнопку » «, введите «-std=c 17» и нажмите Enter для сохранения.
  10. Нажмите » » еще раз, введите «-pedantic-errors» и нажмите Enter.

Готово! Щелкните, чтобы закрыть всплывающее окно, и вы увидите, что оба флага были добавлены в параметр «Другие флаги C «. Вы также могли бы щелкнуть правой кнопкой мыши, и вместо всплывающего окна оно превратится в редактируемое текстовое поле. Вы также можете добавить флаги таким способом, просто введя их все в одной строке, разделенной пробелом. Просто оставьте пробел после $(OTHER_CFLAGS) и добавьте свои флаги в конце. Не удаляйте $(OTHER_CFLAGS)!

Примечание 1: В настройках сборки Xcode 11.3 под заголовком Политики предупреждений вы увидите настройки для «Педантичных предупреждений» и «Рассматривать предупреждения как ошибки». Однако установка для них обоих значения «Да», похоже, только добавляет флаг «-pedantic». Не «педантичные ошибки», как мы хотим. Не уверен, что это ошибка или так задумано, на данный момент я думаю, оставьте их оба на «Нет» и используйте настройку пользовательских флагов компилятора, как показано выше.

Примечание 2: Существует параметр сборки, называемый «Диалект языка C «. Просто введите «диалект» в фильтре поиска, и вы найдете его. Вы можете щелкнуть раскрывающийся список и выбрать C 17 здесь. Это отправит флаг «-std =c 1z» компилятору, поэтому вам не придется вручную добавлять его в настройку пользовательских флагов.

Редактировать: Выяснилось, что C 1z был названием черновой версии C 17 до ее утверждения.

Ответ №2:

1. Выберите проект, к которому принадлежит ваш целевой / исполняемый файл.

2.Выберите целевой объект, для которого вы хотите предоставить флаги компилятора.

3. Выберите «Этапы сборки» -> «скомпилировать исходные тексты»

4. Дважды щелкните по файлу, который генерирует исполняемый файл.

5. Вставьте флаг компилятора, например, -fno-elide-constructors

Вот и все. Перестройте вашу цель, и вы не должны увидеть, что какие-либо конструкторы копирования пропускаются.