在avr g ++中禁用函数声明错误

时间:2012-08-05 11:47:41

标签: c++ makefile compiler-errors arduino avr-gcc

我使用这个Makefile编译我的Arduino草图,其中包含CPP和C的以下标志

CPPFLAGS      += -mmcu=$(MCU) -DF_CPU=$(F_CPU) -DARDUINO=$(ARDUINO_VERSION) \
            -I. -I$(ARDUINO_CORE_PATH) -I$(ARDUINO_VAR_PATH)/$(VARIANT) \
            $(SYS_INCLUDES) $(USER_INCLUDES) -g -Os -w -Wall \
            -ffunction-sections -fdata-sections
CFLAGS        = -std=gnu99
CXXFLAGS      = -fno-exceptions

当我编译一个cpp文件时,如果在声明它们之前使用这些函数,我会收到致命的错误。我浏览了avr g++ options并发现选项-Wimplicit-function-declaration启用它。此外,它还通过-Wall选项启用,该选项在make文件中使用。

我想启用-Wall选项(因为它启用了许多其他警告)但仅禁用-Wimplicit-function-declaration选项。

我检查了文档,但无法弄清楚如何执行此操作。有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:7)

编译C ++代码时无法禁用该错误 - 这是致命错误,而不是警告。

您可以(但不应该)使用C代码(使用-Wno-implicit-function-declaration)来逃避它,但这对C ++不起作用。

cc1plus: warning: command line option "-Wno-implicit-function-declaration" 
                  is valid for C/ObjC but not for C++

答案 1 :(得分:0)

参考; http://arduino.cc/en/Main/FAQ#.UyUa8vmSz99

引用

  

事实上,你已经是; Arduino语言只是一组   可以从代码中调用的C / C ++函数。 你的草图   经历了微小的变化(例如自动生成功能   原型)然后直接传递给C / C ++编译器   (AVR-G ++)

更多信息; http://arduino.cc/en/Hacking/BuildProcess#.UyUa6vmSz98

windows arduino IDE会在将函数声明原型传递给编译器之前对其进行预处理。

如果要复制arduino IDE,则需要在arduino makefile项目中构建此预处理。