完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
嗨,我尝试给main之外的全局变量赋值,比如:它得到错误:main.c:55:warning:(374)缺少基本类型;int.edmain.c:55:error:(984)type redeclaredmain.c:55:error:(1098)变量c c c(main.c:55)(908)exit status=1nbproje的声明冲突ct/Makefile-default.mk:202:目标“build/default/./main.p1”failedmake的配方:***[build/default/./main.p1]Error 1BUILD FAILED(退出值2,总时间:351ms)但是,可以使用gcc编译器来编译,此规则是否仅由XC8持有?
|
|
相关推荐
12个回答
|
|
|
我不认为gcc是某些C编译器的参考实现。由于多种原因,大多数编译器都对此不屑一顾(这里不深入讨论所有细节)。如果要初始化变量,则正确的语法应该是,如果希望通过som共享原型定义E头文件:
|
|
|
|
|
|
du00000001中所说的一切。不要在C文件中使用“ext.”,它属于H文件。每次你打破页面中的建议告诉你如何管理多个文件项目,你会遇到这样的问题。
|
|
|
|
|
|
@ QHBHE刚刚省略了变量声明行中的类型定义。显然,假设编译器是智能的,甚至更糟的是:从WWW中收获了一些不规范的代码。
|
|
|
|
|
|
我敢肯定,他认为“ext.”行在做声明,并且没有说明在任何函数之外不能有可执行代码……
|
|
|
|
|
|
|
|
|
|
|
|
如果VAR或函数处于不同的文件中。它不必在头文件中。可能是一个外部单个函数的情况,所以创建头文件没有意义。
|
|
|
|
|
|
你必须先了解指导方针,然后再去打破它们。
|
|
|
|
|
|
@ GortBetter将外部定义定义到文件中,声明变量也是一致性主题。因此,我强烈建议为这些共享变量使用一个头文件,并将其包含在以某种方式访问变量的任何地方。
|
|
|
|
|
|
嗨,即使gcc编译器没有抱怨,这仍然是一个错误。您可以在程序的一个源文件中指定初始化值以及变量的原始定义(和分配)。然后,您可以在任何函数内使用或向全局变量分配新值。在程序中,条件是在使用变量的每个源文件中都存在外部声明。定义和拥有该变量的源文件:使用全局变量的任何其他源文件:它被允许同时具有变量的定义和外部声明of相同的变量,在同一文件中。这对于包含外部变量声明的头文件是有用的。迈西尔
|
|
|
|
|
|
GCC不在文件范围内编译“CCC=3”。
|
|
|
|
|
|
我总是打开一个测试程序集文件。有些东西需要挂钩到一个函数,但它不是我的标准M.O。如果我有一个asm文件:.globl_test:那么我将使用一个extern int test();它只会被调用一次。对于一个库,我将有一个包含20个extern函数的头。是的,我知道C。
|
|
|
|
|
|
MysIL已经给出了最好的解释。但是,安迪·***人,如果你能使自己更了解这些术语,也许对你有帮助。这是一个定义:你应该只定义一个变量。每个定义同时也是一个声明。这是一个声明:你可以把它放入每个文件,甚至函数中。它告诉编译器某处有一个完全像这样定义的变量。这是一个赋值:这是一个语句,并且只能有这些内部函数。在全局级别的函数之外,您不能这样做。你这样做是错误的。这是一个带有初始化的定义:同样,你只能定义一次变量。因此,您也可以只初始化一次变量,并且必须与同一文件中的定义一起使用。您需要理解初始化与赋值根本不同。现在,编译器检查您的文件。首先它将看到声明并接受它。编译器现在知道ccc是一个易失的uint8_t类型,它在其他地方定义。然后它将看到以下行:如前所述,这将是一个赋值,并且在全局级别上这是不允许的。因此,编译器试图找出,你想做什么。不幸的是,编译器认为,这应该是一个带有初始化的定义,其中缺少类型,并且接受它,尽管它警告您,但是您确实犯了错误。这给了您第一个警告:编译器不知道您想要哪种类型,所以它决定使用int类型。所以它解释您的行,就像下面的定义:现在编译器试图把事情和它已经知道的东西放在一起。它已经知道了CCC的声明,它是一个“不稳定的UIT88T”类型。但现在它只得到了Cint类型的定义(这也是一个声明)。这是两个不匹配的声明,这是一个冲突。这是下一个错误:正如Mysil所解释的,只能在定义的地方初始化变量。不能与声明一起进行初始化。如果您不想(或者如果您不能)与定义一起进行初始化,那么唯一的方法是使用一个函数,该函数通过使用普通赋值将变量设置为值。例如,您可以创建一个初始化函数,并且在使用该变量执行其他操作之前,需要调用该函数一次。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1122浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 22:12 , Processed in 0.998278 second(s), Total 96, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5900