簡體   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