C语言编译中出现main.c(15): error: #130: expected a “{“的情况汇总——持续更新

it2023-03-29  95

C语言编译中出现main.c(15): error: #130: expected a "{"的情况汇总——持续更新

问题描述情况1 解决方案情况1方案 总结

先说一个 的BUG,我第一次用,输入本文章的标题时,在复制main.c(15): error: #130: expected a "{"之后,标题就无法显示了,经过多次尝试,发现标题识别在第一个英文输入下的右括号,即“)”结束,故必须把main.c(15): error: #130: expected a "{"中c(15)中的括号改为中文输入下的括号。 网上查了一下,标题所述的问题有很多种情况,我目前遇到了一种很奇葩但很有意义的错误原因,记录在此供大家交流学习,其他类型的错误我有空会进行整理

问题描述

情况1

为简单起见,我举一个非常简单的例子,主文件main.c内代码1如下:

#include "stm32f10x_gpio.h" int main (void) { int i; i=1; }

就是简单的定义一个整形变量i,并给i赋值为1,可以看出主函数内的内容是完全没问题的,分号";"也是英文输入法下的格式。 但是编译后还是报错main.c(15): error: #130: expected a “{”,让人摸不到头脑。

解决方案

情况1方案

其实代码很简单,就这么短,在反复确认主函数内部没有问题后,就应该考虑主函数之外的内容了,实际上主函数之外就只剩下C语言的预编译命令:

#include "stm32f10x_gpio.h"

该命令将头文件包含进main.c文件,在编译中,实际上编译器就会将stm32f10x_gpio.h中的文件复制到main.c中,代替预编译命令的位置。而我的stm32f10x_gpio.h中内容为:

void GPIO_SetBits(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

包含了两个函数头,而细心点就会发现上述代码第二行少了一个分号“;” 就是这个错误,在编译时,编译器把stm32f10x_gpio.h中的文件复制到main.c中,代替预编译命令的位置后,就发现主函数前一行少了一个分号,故而报错,至于为什么报错少一个“}”而不是报错漏了一个“;”,我就不得而知了。

总结

1.在主函数附近的错误,需要考虑函数外经跟着的内容,包括函数前和函数后;

最新回复(0)