c多个源文件返回错误值

时间:2016-11-23 03:03:07

标签: c linux gcc makefile

我正在为我的Linux课程完成一些作业,其中一个作业教会我们使用makefile。我设法让我创建的makefile正常运行,所以不用担心,你不会剥夺我的知识。也就是说,我对我的计划的行为感到困惑。

我使用makefile将4个源文件编译成一个程序。 3个源文件由一个函数组成,它基本上只使用math.h中的标准函数来执行计算,返回一个double。例如:

#include <math.h>

double sqroot(double arg)
{
    arg = (sqrt(arg));
    return arg;
}

一个源文件调用所有这三个函数。

#include <math.h>

double sum(double arg)
{
    arg = (sqroot(arg) + square(arg) + sine(arg));
    return arg;
}

主要内容如下:

#include <stdio.h>

void main(int argc, char *argv[])
{
    double num=atoi(argv[1]);
    printf("the sine of %lf in radians is %lf\n", num, (sine(num)));
    printf("the square root of %lf is %lf\n", num, sqroot(num));
    printf("the square of %lf is %lf\n", num, square(num));
    printf("the sum of all of these is %lf\n", sum(num));
}

程序编译没有问题,但是当我运行程序时,它会输出错误的值。

使用GDB,我已经检查了每个函数的返回变量的值,这个值是正确的,但在进入main之后,值不一样。当我只使用构造函数将这些函数放在main中时,程序就会按预期运行。

示例终端输出:

eng-svr-1:/home/jhazel/Desktop/Linux/257/hw8>make all
gcc  -c main.c sine.c sqrt.c square.c sum.c -lm
gcc  -o HEYTHERE main.o sine.o sqrt.o square.o sum.o -lm
gcc  -g main.c sine.c sqrt.c square.c sum.c -lm
eng-svr-1:/home/jhazel/Desktop/Linux/257/hw8>./HEYTHERE 2
the sine of 2.000000 in radians is 0.000000
the square root of 2.000000 is 0.000000
the square of 2.000000 is 0.000000
the sum of all of these is 0.000000
eng-svr-1:/home/jhazel/Desktop/Linux/257/hw8>

我是否错误地构建了makefile?用不正确的命令编译?或者我在源文件中遗漏了什么?

1 个答案:

答案 0 :(得分:0)

感谢MikeCat建议在我的makefile中使用-Wall -Wextra,我能够确定我没有包含其他源文件中实现的函数的声明。

为了解决这个问题,我提供了一个带声明的头文件:

double square(double arg);
double sine(double arg);
double sqroot(double arg);

到sum和main源文件,另外double sum(double arg);到main。