我写了一个非常简单的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
作为可能的解决方案
答案 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);