我正在开发一个读取NFC卡的程序,我有一个头文件source.h,它包含所有变量,用于它的相关源代码source.c。样本如下所示:
#ifdef __cplusplus
extern "C" {
#endif
int SDA_SUPPORT_PRESENT = 0;
int DDA_SUPPORT_PRESENT = 0;
int CDA_SUPPORT_PRESENT = 0;
int CARDHOLDER_VERIFICATION_PRESENT = 0;
...
源代码source.c使用上面定义的变量来保存方法。样本如下所示:
#include <source.h>
extern void translateError(uint8 error, int slot) //one of the methods
{
TP_DbgSerialPrn("\n\rDevice Error: ");
switch(error)
{
...
我还有一个源文件CardReader.c,它调用source.c中包含的方法,并且有一个相关的头文件CardReader.h。问题是,当我在CardReader.h文件中包含source.h文件时,我收到以下错误:
../CardReader.o:(.bss+0x12b4): first defined here
../source.o:(.bss+0x12b8): multiple definition of `SLOT_NUMBER'
../CardReader.o:(.bss+0x12b8): first defined here
../source.o:(.data+0x49): multiple definition of `LISTED_APPLICATION_IDS'
../CardReader.o:(.data+0x49): first defined here
../source.o:(.data+0xc9): multiple definition of `LISTED_APPLICATION_IDS_LENGTH'
所有其他错误消息属于同一类型。 source.h文件包含在CardReader.h中:
#include <TPCardReader.h>
#include <source.h>
#ifdef __cplusplus
extern "C" {
#endif
...
路径变量设置正确,因此可以找到它,然后像往常一样在CardReader.c中调用CardReader.h文件。我的问题是为什么会出现这个错误,但我只在source.h中定义了一次指定的变量?有什么东西丢失或没有做或我不理解错误?
答案 0 :(得分:1)
不应在头文件中定义变量。
而是在头文件中你应该
extern int SDA_SUPPORT_PRESENT;
然后在源(.c)文件中你应该
int SDA_SUPPORT_PRESENT = 0;
这将确保您只有一个变量
的定义但是,全球变量再次成为一个坏主意