Как отключить заголовок «curses.h» (часть «stdio.h в Xcode 6.3 OSX Yosemite»), чтобы избежать противоречивых объявлений функций

Я пытаюсь создать проект в Xcode, но я получаю ошибки. Implicit declaration of function 'clear' is invalid in C99 и Conflicting types for 'clear' .

Вот код:

 //main.c #include  #include "tree.h" int main(){ clear(); // Implicit declaration of function 'clear' is invalid in C99 return 0; } //tree.c #include  #include "tree.h" void clear(){ ///Conflicting types for 'clear' printf("Command clear.\n"); } //tree.h #include  void clear(); ///Conflicting types for 'clear' 

Почему я получаю эти ошибки и предупреждения? Я попытался найти решение на StackOverflow, но все связанные ответы там, где случай, когда не было #include какого-то рода.

«clear» не является ключевым словом в C, так что это не он случай, не так ли?
(источник: http://aboutc.weebly.com/keywords.html )

Связанные темы (не отвечайте на мой вопрос, хотя они действительно связаны):

  • Неявное объявление функции ‘sum’ недействительно в C99
  • Неявное объявление функции недействительно в C99

Спасибо за любую помощь.


ОБНОВИТЬ!

Оказывается, что изменение имени clear функции на cleark функцию решало проблему. Тем не менее это пока не имеет никакого смысла.


ОБНОВЛЕНИЕ 2!

Я основывал свой проект на шаблоне command line tool от Xcode 6.3 на OS 10.10. Из-за этого Xcode атомизировал добавление некоторых библиотек и флагов в компилятор проекта. Самое главное здесь, что заголовок curses.h был добавлен, и этот заголовок уже содержит функцию clear() .

Вот Conflicting types for 'clear' журнала ошибок: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/curses.h:541:28: Previous declaration is here

Я попытался удалить -lcurses из флагов компилятора вручную, но я не смог найти такие параметры. Есть ли другой способ создания проекта? (В целом моя цель состоит в том, чтобы иметь возможность использовать отладчик Xcode при расширении проекта)


ОБНОВЛЕНИЕ 3! Согласно тому, что Пол Гриффитс открыл и опубликовал в комментарии ниже, проблема следующая:

Я действительно могу воспроизвести эту проблему с помощью Xcode 6.3.1 только с представленным кодом. По какой-то причине stdio.h, похоже, включает curses.h (т. Е. Если вы не укажете stdio.h, этот вопрос исчезнет), и я не смог быстро найти способ остановить его. Это кажется проблематичным, поскольку стандартные заголовки не должны импортировать случайные символы в глобальное пространство имен без простого и очевидного способа отключить его.

    Обычно я запускаю препроцессор C, чтобы увидеть, что компилятор фактически анализирует. Однако, после вывода Xcode Preprocessor Output для проверки вывода препроцессора с помощью Xcode этого не получается – он переводит #include в @import . Вот что показывает представление препроцессора:

     // Preprocessed output for tree.c // Generated at 9:24:57 PM on Friday, May 1, 2015 // Using Debug configuration, x86_64 architecture for curses-vs-stdio target of curses-vs-stdio project # 1 "/Users/thomas/Desktop/curses-vs-stdio/curses-vs-stdio/tree.c" # 1 "" 1 # 1 "" 3 # 322 "" 3 # 1 "" 1 # 1 "" 2 # 1 "/Users/thomas/Desktop/curses-vs-stdio/curses-vs-stdio/tree.c" 2 # 1 "/Users/thomas/Desktop/curses-vs-stdio/curses-vs-stdio/tree.h" 1 void clear(void); @import Darwin.C.stdio; /* clang -E: implicit import for "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/stdio.h" */ # 5 "/Users/thomas/Desktop/curses-vs-stdio/curses-vs-stdio/tree.c" 2 void clear(void) { printf("Command clear.\n"); } 

    По-видимому, проблема заключается в использовании Xcode модhive, а не stdio.h включая curses.h . В этом заключается проблема «Дарвина».

    Фактически, если я отключу модули (используя подсказку в Enable Clang Modules, Disable Auto Linking ), проблема сборки исчезнет. Это

    • в настройках сборки
    • раздел Apple LLVM 6.1 – Язык – Модули
    • настройка Включить модули (C и Objective-C)

    В качестве еще одного намека на проблему, слегка изменив пример (поставив прототип перед включением), я вижу сообщение, жалующееся на перегрузку, но это не C.

    Возможно, Apple исправит это в следующей версии.

    Вы включаете «trie.h», а не «tree.h».

    Но, возможно, это просто вы небрежны при публикации кода …

    Уверен, что есть другая функция с именем clear (), определенная где-то. Возможно, в вашей версии stdio.h.