我需要帮助在简单的C代码中声明参数

时间:2015-02-17 18:57:45

标签: c parameters

我写了一个非常简单的C程序;它是 main.c constants.c constants.h

这是 main.c

#include <stdio.h>
#include <stdlib.h>
#include "constants.h"

int main(){
printf("a=%f\n",a);
return 0;
}

这是 constants.c

#include "constants.h"
float a = 1.0;
float b = 3.0;
float c = a + b;

这里是 constants.h

extern float a;
extern float b;
extern float c;

尝试使用gcc编译后,我收到以下错误:

error: initializer element is not constant
float c = a + b;

我在互联网上读到了收到消息的原因,但我找不到任何实际的解决方案;我的目标是通过保持代码的结构(3个文件)来获得c = a + b;任何人都可以告诉我应该做些什么才能实现我的目标?

我忘了提一件重要的事情:我不能使用#define作为可能的解决方案

3 个答案:

答案 0 :(得分:2)

在您的代码中,float c位于全局范围内,在全局范围内,您不能使用a + b这样的表达式来进行初始化。你需要有一个能明确完成工作的功能。


编辑:

例如,不使用任何功能,你可以做这样的事情

#define A 1.0
#define B 3.0
#define C (A+B)

float a = A;
float b = B;
float c = C;

答案 1 :(得分:2)

#define A 1.0
#define B 3.0

float a = A;
float b = B;
float c = A+B;

答案 2 :(得分:1)

如果您可以使用gcc&#39; __attribute__扩展程序:

的main.c

#include <stdio.h>
#include <stdlib.h>
#include "constants.h"

int main(void) {
    // initilize_globals(); // function with __attribute__ ((constructor))
    printf("a = %f\n", a);
    printf("b = %f\n", b);
    printf("c = %f\n", c);
    return 0;
}

constants.c

#include "constants.h"
float a = 1.0;
float b = 3.0;
float c;
// __attribute__ ((constructor)) is a gcc extension
__attribute__ ((constructor)) void initialize_globals(void) {
    // you can assign a and b here instead of above
    c = a + b;
}

constants.h

extern float a;
extern float b;
extern float c;
// void initialize_globals(void);