C中的Faux getter / setter函数返回错误的值

时间:2013-06-29 17:41:46

标签: c return-value getter-setter mutators

请帮帮忙?我在这里有点不知所措。

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函数?

1 个答案:

答案 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),这样你就不会再这样了。

block.h

#ifndef BLOCK_H
#define BLOCK_H 

void set_alpha(double a);
double get_alpha();

#endif

的main.c

#include "block.h"

int main() {
    ...
}

block.c

#include "block.h"

...