繁体   English   中英

有人可以帮我解决 C 问题吗? 当我尝试运行它不返回任何东西

[英]Could someone help me with that C problem? When I try to run it doesn't return anything

#include <stdio.h>
#include <stdlib.h>

double cube(double num) {
    return num * num * num;
}


int main(){

    Answer(cube(3.0));

    return 0;
}

void Answer(double cube()) {

    printf("Answer: %.1f\n", cube());

}

如果您尝试运行它,至少在我的计算机上不起作用。 我试图改变一些东西,比如添加更多的括号,但我找不到解决方案。

我不认为你的代码编译。 这里有一些快速修复:

#include <stdio.h>
#include <stdlib.h>

void Answer(double); // forward declaration, you could also define Answer before main

double cube(double num) {
    return num * num * num;
}


int main(){

    Answer(cube(3.0));

    return 0;
}

void Answer(double value) {

    printf("Answer: %.1f\n", value);

}

或者更简单,将Answer() function 移到main()上方的cube() ) 下方。

C 文件在Single-Pass中编译。 这意味着在使用 function 之前,编译器必须知道它。 (它必须在到达使用点之前已经知道它是什么)

main() Answer() ) (并且没有前向声明),当编译器到达main()并看到Answer()时,它还不知道它是什么。 所以一个解决方法是提供一个原型,一个前向声明,向编译器保证是的,这个 function 将在源文件(或其他地方)中定义

您的另一个选项(推荐用于短函数)是简单地按顺序订购 function 的定义,以便在使用之前定义每个。 这自然会以上面定义的所有函数结束main() ,但这并没有错。

随着您使用的函数的大小和数量的增长——那么提供前向声明以帮助以一种逻辑方式组织代码是有益的(方便的),它可以在源文件和 header 文件之间以最小的努力进行拆分. 在大型源文件中,按照它们出现在main()下方的顺序组织前向声明,还提供了定义函数的路线图(这可以帮助您导航到需要 go 的位置,或提供快速复制/粘贴进入搜索对话框)

@selbie 已经为您提供了使用原型或前向声明的答案。 一个简单的重新排序将是:

#include <stdio.h>

double cube (double num)
{
    return num * num * num;
}

void Answer (double value)
{
    printf ("Answer: %.1f\n", value);
}

int main (void) {

    Answer (cube (3.0));

    return 0;
}

注意:避免在代码中包含不需要的 header 文件)

你想如何处理它完全取决于你,但这些是 go 进入你决定的正常考虑因素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM