头文件包含在 MPLAB X IDE 中不起作用



我的代码和错误数据的屏幕截图

这是我的主.c文件

#include "services_initialisations_prototype.h"
#include "services_functions_prototype.h"

void main(void)
{
initSfr();
while(1){
updateMatrix(404, 1);
}
return;
}

这是我的服务initializations_prototype.h


#ifndef XC_HEADER_TEMPLATE_H
#define XC_HEADER_TEMPLATE_H
#include <xc.h> // include processor files - each processor file is guarded.  
#include <stdint.h>
//these are my function declarations
extern void initInterrupt();
extern void initIoc();
extern void initAdc();
extern void initTimer2();
extern void initSfr();

#ifdef  __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef  __cplusplus
}
#endif /* __cplusplus */
#endif  /* XC_HEADER_TEMPLATE_H */

这是我的服务_功能_原型.h

#ifndef XC_HEADER_TEMPLATE_H
#define XC_HEADER_TEMPLATE_H
#include <xc.h> // include processor files - each processor file is guarded.  
#include <stdint.h>
//these are my function declarations
extern void updateMatrix(int, int);
#ifdef  __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef  __cplusplus
}
#endif /* __cplusplus */
#endif  /* XC_HEADER_TEMPLATE_H */

当我尝试在MPLAB X IDE 4.05版本中包含两个头文件时,它似乎没有识别第二个头文件。我试着交换订单,但仍然没有检测到第二个订单。

services_initialization_protype.h包含SFR的初始化,services_functions_prototype.h包含其他功能的原型。这些功能是相互独立的。

当我编译时,它显示

函数updateMatrix((被声明为隐式int。变量_updateMatrix((的声明冲突

这表明头文件services_functions_prototype没有被识别。

所附的屏幕截图以灰色显示了servicesfunctionsprototype.h中的代码,并且似乎部分代码没有执行。

当我将整个声明从头文件复制到主文件时,它运行得非常好。

您在两个文件中使用了相同的include保护。因为一个文件包含在另一个文件之前,所以它定义了XC_HEADER_TEMPLATE_H,这使得#ifndef在第二个文件中失败。把它们换成独一无二的东西。Wiki包含卫士。

请记住,带有两个前导下划线的标识符或带有前导下划线和大写字母的标识符是由C标准保留的。好的在线文档是gcc保留名称。

使用大写的文件名,如SERVICES_FUNCTIONS_PROTOTYPE_H_SERVICES_INITIALIZATIONS_PROTOTYPE_H_

注:

  • 函数声明中的空参数列表声明了一个函数,该函数采用未知的计数和参数类型。更喜欢在函数参数列表中显式写入void,以定义不带参数的函数,从而启用编译器静态检查。同上void initInterrupt(void);。cppreference函数声明
  • 在文件作用域中声明的标识符隐式地具有外部链接。即extern只是多余的。,只有void initSfr(void);而不是extern void initSfr();cppreference存储类
  • extern "C" {部分在您的头文件中没有任何意义-里面什么都没有。通常将extern "C" {放在头文件的顶部以包含里面的所有内容。如果您的头将被C++编译器使用,那么函数名称将被破坏并且无法正确解析。我想我建议删除extern "C" {部分

最新更新