我对C语言很陌生。
在我的main.c中
float BatteryLvl_Volts;
float get_BatteryLvl_Volts(void)
{
return BatteryLvl_Volts;
}在我的Battery.c
float BatteryLvl_Volts = get_BatteryLvl_Volts();
void battery_level_indicator(float BatteryLvl_Volts)
{
if( 3.3 < BatteryLvl_Volts ){
LED_ON(GREEN); // Turn on Green LED
}
}我的问题
如果我在Battery.c中使用包含"main.c"的#,则IDE会发出许多警告(超过200)。请问如何解决这个问题?
谢谢!
发布于 2021-06-25 06:28:40
若要访问在另一个转换单元(file1.c)中定义的变量(file2.c),符号必须声明为extern
// file1.c
float some_global_float = 0.0 ;// file2.c
extern float some_global_float ;通常,您会将extern声明放在头中以避免重复,并允许编译器检查声明和定义匹配:
// file1.c
#include "file1.h"
float some_global_float = 0.0 ;// file1.h
#if !define FILE2_H
#define FILE2_H
extern float some_global_float ;
#endif// file2.c
#include "file1.h"
float some_function( float a )
{
return some_global_float * a ;
}实际上,实际上应该完全避免全局变量。这是一种不良的做法,而且总是没有必要。但这是一个不同的问题。
发布于 2021-06-25 06:35:44
这是C:https://www.tutorialspoint.com/cprogramming/index.htm的一个很好的教程站点
您应该将将为#include的文件命名为带有.h后缀的C文件(头文件)。头文件应该只是定义或静态库,而不是实际的程序代码。
如果要组合多个C文件,则使用所谓的链接器。链接器是将多个二进制文件组合成一个二进制文件的程序。
如果要访问全局变量,则需要使用关键字extern。
main.c
extern int g_bananas = 0; // declaration and definition - extern is optional
//int g_bananas = 0; // this would be also fine for declaration and definition
void calcbananas(int a, int b); // just declaration - optional but recommended
int main(int argc, char* argv[]){
calcbananas(1, 2);
return g_bananas;
}sub.c
extern int g_bananas; // just declaration - extern is needed
void calcbananas(int a, int b){
g_bananas = a + b;
}main.c和sub.c需要通过链接程序链接。
您应该始终使用前缀来命名全局变量,比如g_。
一些编译器有内置的链接器,例如gcc编译器只需输入shell命令gcc main.c sub.c就可以编译和链接以上的2C文件。
https://stackoverflow.com/questions/68126223
复制相似问题