请帮帮忙?我在这里有点不知所措。
main.c中:
int main(){
double x = 12.345;
set_alpha(x);
double y = get_alpha();
printf("%f\n", y);
return 0;
}
block.c:
double alpha;
void set_alpha(double a){
alpha = a;
printf("%f\n", alpha);
}
double get_alpha(){
return alpha;
}
运行gcc block.c main.c
时,我会
12.345000
183898224.000000
,后一个数字随机变化。发生了什么以及如何修复我的人造getter / setter函数?
答案 0 :(得分:1)
如果您没有get和set_alpha的原型,那么编译器不知道它们的参数和返回值是什么。每个源文件都是独立编译的。如果原型没有在main.c
中列出,那么编译器必须猜测函数签名。它错误地猜测一切都是int
,如int set_alpha(int a)
和int get_alpha()
。糟糕!
修复:
void set_alpha(double a);
double get_alpha();
int main() {
...
}
最好的办法是创建一个单独的头文件block.h
并将原型放在那里。另外要确保启用所有编译器的警告(例如gcc -Wall
),这样你就不会再这样了。
#ifndef BLOCK_H
#define BLOCK_H
void set_alpha(double a);
double get_alpha();
#endif
#include "block.h"
int main() {
...
}
#include "block.h"
...