首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从main.c获取变量值

无法从main.c获取变量值
EN

Stack Overflow用户
提问于 2021-06-25 06:06:59
回答 2查看 88关注 0票数 0

我对C语言很陌生。

在我的main.c

代码语言:javascript
复制
float BatteryLvl_Volts;

float get_BatteryLvl_Volts(void)
{
    return BatteryLvl_Volts;
}

在我的Battery.c

代码语言:javascript
复制
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)。请问如何解决这个问题?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2021-06-25 06:28:40

若要访问在另一个转换单元(file1.c)中定义的变量(file2.c),符号必须声明为extern

代码语言:javascript
复制
// file1.c
float some_global_float = 0.0 ;
代码语言:javascript
复制
// file2.c
extern float some_global_float ;

通常,您会将extern声明放在头中以避免重复,并允许编译器检查声明和定义匹配:

代码语言:javascript
复制
// file1.c
#include "file1.h"
float some_global_float = 0.0 ;
代码语言:javascript
复制
// file1.h
#if !define FILE2_H
#define FILE2_H
    extern float some_global_float ;
#endif
代码语言:javascript
复制
// file2.c
#include "file1.h"

float some_function( float a )
{
    return some_global_float * a ;
}

实际上,实际上应该完全避免全局变量。这是一种不良的做法,而且总是没有必要。但这是一个不同的问题。

票数 2
EN

Stack Overflow用户

发布于 2021-06-25 06:35:44

这是C:https://www.tutorialspoint.com/cprogramming/index.htm的一个很好的教程站点

您应该将将为#include的文件命名为带有.h后缀的C文件(头文件)。头文件应该只是定义或静态库,而不是实际的程序代码。

如果要组合多个C文件,则使用所谓的链接器。链接器是将多个二进制文件组合成一个二进制文件的程序。

如果要访问全局变量,则需要使用关键字extern

main.c

代码语言:javascript
复制
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

代码语言:javascript
复制
extern int g_bananas; // just declaration - extern is needed

void calcbananas(int a, int b){
    g_bananas = a + b;
}

main.csub.c需要通过链接程序链接。

您应该始终使用前缀来命名全局变量,比如g_

一些编译器有内置的链接器,例如gcc编译器只需输入shell命令gcc main.c sub.c就可以编译和链接以上的2C文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68126223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档