如何禁用“ curses.h”标头(Xcode 6.3 OSX Yosemite中“ stdio.h的一部分”,以避免函数声明冲突)>

问题描述 投票:2回答:2

我正在尝试使用Xcode构建项目,但出现以下错误Implicit declaration of function 'clear' is invalid in C99Conflicting types for 'clear'

这里是代码:

//main.c
#include <stdio.h>
#include "tree.h"

int main(){
  clear(); // Implicit declaration of function 'clear' is invalid in C99
  return 0;
}

//tree.c
#include <stdio.h>
#include "tree.h"
void clear(){ ///Conflicting types for 'clear'
  printf("Command clear.\n");
}

//tree.h
#include <stdio.h>

void clear(); ///Conflicting types for 'clear'

为什么我会收到这些错误和警告?我试图在StackOverflow上搜索解决方案,但是所有相关的答案都是关于没有某种#include的情况。

'clear'不是C中的关键字,所以不是这样吗? (来源:http://aboutc.weebly.com/keywords.html

相关主题(尽管它们实际上是相关的,但不回答我的问题:


UPDATE!

事实证明,将clear函数的名称更改为cleark函数可以解决此问题。不过,这对我来说还没有任何意义。


UPDATE 2!

我的项目基于Mac OS 10.10上Xcode 6.3的command line tool模板。因此,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的调试器)


UPDATE 3!

根据保罗·格里菲思(Paul Griffiths)在下面的评论中发现并发表的内容,问题如下:

我确实可以使用Xcode 6.3.1复制这个问题,只显示代码。 由于某种原因,stdio.h似乎包含curses.h

(即,如果您不包含stdio.h,则此问题消失了),而且我一直无法迅速找到一种方法来停止它这样做。这似乎是有问题的,因为如果没有简单易行的方式将其关闭,则标准标头不应将随机符号导入全局名称空间。

我正在尝试在Xcode中构建项目,但遇到以下错误:函数clear的隐式声明在C99中无效,并且对于clear的类型冲突。这是代码://main.c #include ...

c macos curses compiler-flags xcode6.3
2个回答
4
投票

通常,我运行C预处理器以查看编译器实际解析的内容。但是,使用Xcode Preprocessor Output


1
投票
© www.soinside.com 2019 - 2024. All rights reserved.