1

请帮忙?我在这里有点茫然。

主.c:

int main(){
    double x = 12.345;
    set_alpha(x);
    double y = get_alpha();
    printf("%f\n", y);
    return 0;
}

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

4

1 回答 1

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),这样您就不会再被这个问题所困扰。

块.h

#ifndef BLOCK_H
#define BLOCK_H 

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

#endif

主程序

#include "block.h"

int main() {
    ...
}

块.c

#include "block.h"

... 
于 2013-06-29T17:46:17.017 回答