嵌入式技术论坛
直播中

LL-LING宁

8年用户 1279经验值
擅长:电源/新能源
私信 关注
[问答]

请教大神c/C++混编报错如何解决呢

关于c/C++混编报错存在疑问,不是很理解
rtt studio 4.0.3 工程已打开支持C++
在.c和.cpp都使用的.h中使用#ifdef __cplusplus

.h如下:
`#ifndef APPLICATIONSRING_H

define APPLICATIONSRING_H
ifdef __cplusplus
extern “C” {

endif
include “stdio.h”
include “stdlib.h”
define ADC_MAX_NUM 1000//数组的个数,存放触发后的数据
uint16_t ADC_Values[ADC_MAX_NUM]={0};
/省略代码/

ifdef __cplusplus
}

endif
endif / APPLICATIONSRING_H /` 在.c和.cpp都使用了定义的数组(直接#inlcude 这个头文件)。但是编译器报错如下: ./applications/main.o:(.bss.ADC_Values+0x0): multiple definition ofADC_Values’ ./rt-thread/components/qmod/cap_server/src/capserver.o:(.bss.ADC_Values+0x0): first defined here`

不是很理解 明明使用了#ifdef __cplusplus 为何还是存在问题?

回帖(1)

王莉

2022-8-29 11:40:22
这与 c++ 无关, 即使两个.c文件同时包含这个头文件,也会报相同的编译错误的,
因为这是创建全局变量的语句,不可以出现在头文件. 应该在任意一个.c 文件定义,然后在头文件声明即可。示例:
xx.c

// ......
uint16_t ADC_Values[ADC_MAX_NUM]={0};
xx.h

extern uint16_t ADC_Values[];
举报

更多回帖

发帖
×
20
完善资料,
赚取积分