如何在 c (arduino) 中使用 #define 正确硬编码编译器的定义标志 (-D)
How to properly hardcode compiler's define flag (-D) with #define in c (arduino)
将编译器的 -D 标志硬编码到源文件中的最佳方法是什么?
我想将 #define 放在 header 的 one 中,然后导入一堆应该对该定义做出反应的东西。它是那样工作的吗? header 应该放哪个?还是直接到main.c?还是全部?
TMI-details:这里的环境是 digispark hw-018(attiny85 with built-in usb programmer)#define 应该替换 -DUSE_SOFTWARE_SPI 这样我就可以使用 AVR-CAN SPI 模式下的库从 MCP2515 读取内容。
编辑:经过一些烦人的头撞墙之后,main.c 的顶部现在看起来像这样,但仍然不起作用。
#define USE_SOFTWARE_SPI
#include "src/can.h"
#define USE_SOFTWARE_SPI
#include <avr/io.h>
#define USE_SOFTWARE_SPI
#include <avr/pgmspace.h>
#define USE_SOFTWARE_SPI
#include <DigiUSB.h>
我说的是在某处覆盖了我的定义的东西是对的吗?如果我在#ifndef(或#ifdef)
之前对#define USE_SOFTWARE_SPI 进行硬编码,它就会起作用
这里有几种方法。
如果它只是一个 main.c
源文件,那么把它放在文件的顶部就可以了:
// main.c
#define USE_SOFTWARE_SPI // must be first!
#include <spi_stuff.h>
...
如果这需要在多个源文件中,这就不能很好地扩展,因为在几个地方之一很容易错过它。
我想即使有多个源文件,但实际上只有一个引用了需要影响的 headers 文件,风险较小,但这就是错误发生的方式。
我更喜欢将这种东西作为一个整体放在项目定义中,无论是在 makefile
中还是在 IDE 用来驱动项目的任何地方,因为这样可以确保每个人都能看到它。
因此,如果您确实有多个源文件并且您不能或不会将其放入项目文件中,那么处理它的方法是使用您自己的自定义 header,它仅存在于这个目的:
// my_spi_stuff.h
#define USE_SOFTWARE_SPI
#include <spi_stuff.h>
... others if needed
然后在您的 .c
程序中包含 that。请务必为文件命名,强烈建议“局部调整”,而不是可能与图书馆提供的名称相混淆的名称。
编辑 我只是 re-read 这是 Arduino,据我所知 IDE 没有 project-wide 设置.
将编译器的 -D 标志硬编码到源文件中的最佳方法是什么?
我想将 #define 放在 header 的 one 中,然后导入一堆应该对该定义做出反应的东西。它是那样工作的吗? header 应该放哪个?还是直接到main.c?还是全部?
TMI-details:这里的环境是 digispark hw-018(attiny85 with built-in usb programmer)#define 应该替换 -DUSE_SOFTWARE_SPI 这样我就可以使用 AVR-CAN SPI 模式下的库从 MCP2515 读取内容。
编辑:经过一些烦人的头撞墙之后,main.c 的顶部现在看起来像这样,但仍然不起作用。
#define USE_SOFTWARE_SPI
#include "src/can.h"
#define USE_SOFTWARE_SPI
#include <avr/io.h>
#define USE_SOFTWARE_SPI
#include <avr/pgmspace.h>
#define USE_SOFTWARE_SPI
#include <DigiUSB.h>
我说的是在某处覆盖了我的定义的东西是对的吗?如果我在#ifndef(或#ifdef)
之前对#define USE_SOFTWARE_SPI 进行硬编码,它就会起作用这里有几种方法。
如果它只是一个 main.c
源文件,那么把它放在文件的顶部就可以了:
// main.c
#define USE_SOFTWARE_SPI // must be first!
#include <spi_stuff.h>
...
如果这需要在多个源文件中,这就不能很好地扩展,因为在几个地方之一很容易错过它。
我想即使有多个源文件,但实际上只有一个引用了需要影响的 headers 文件,风险较小,但这就是错误发生的方式。
我更喜欢将这种东西作为一个整体放在项目定义中,无论是在 makefile
中还是在 IDE 用来驱动项目的任何地方,因为这样可以确保每个人都能看到它。
因此,如果您确实有多个源文件并且您不能或不会将其放入项目文件中,那么处理它的方法是使用您自己的自定义 header,它仅存在于这个目的:
// my_spi_stuff.h
#define USE_SOFTWARE_SPI
#include <spi_stuff.h>
... others if needed
然后在您的 .c
程序中包含 that。请务必为文件命名,强烈建议“局部调整”,而不是可能与图书馆提供的名称相混淆的名称。
编辑 我只是 re-read 这是 Arduino,据我所知 IDE 没有 project-wide 设置.