簡體   English   中英

了解如何從C中的其他源文件調用函數

[英]Understanding how to call functions from another source file in C

我試圖正確理解如何從C中的另一個源文件調用C函數。我有一個簡單的例子,我正在努力工作。 我有兩個函數,function1和function2,它們包含在file.c中。 我試圖從main.c調用函數2 bur接收錯誤“未定義的函數2引用”。

main.c中

#include <stdio.h>
#include <stdlib.h>
#include "file.h"
int main()
{
    int result = function2(3);
    printf("Result = %d  ", result);
    return 0;
}

file.c

int function1(int a)    /* Function 1  definition */
{
    int val = a*a;

    return val;
}

int function2(int val)    /* Function 2 definition */
{
    return val +5;
}

file.h

#ifndef FILE_H_INCLUDED
#define FILE_H_INCLUDED
extern int function1(int a) ;
extern int function2(int val);


#endif // FILE_H_INCLUDED

(我知道function1和function2可以組合成一個函數,但我想理解為什么這個例子不起作用! - 謝謝)

  • 在Codeblocks中,文件 - >新建 - >項目。
  • 選擇控制台應用。 下一個。
  • 選擇語言C.接下來。
  • 選擇項目標題路徑等。
  • 編譯器應該是GCC,不要觸摸任何設置。 成品。
  • 在項目窗口中,將相關文件添加到項目中。 你已經得到了一個main.c,所以創建一個file.c並添加它。 雖然沒有必要,但也可以方便地添加h文件。
  • 建立並運行。
  • 輸出:結果= 8

將代碼復制/粘貼到main.c file.c file.h中可以正常工作


其他與問題無關的好建議:

  • 設置 - >編譯器 - >編譯器標志選項卡。 檢查-Wall -Wextra和-pedantic-errors對應的選項。 如果沒有C11選項,請添加一個。 看到這個

  • 正如有人指出的那樣,你應該始終從#include "file.h"

您的源代碼是正確的。 您可能沒有做的是將兩個目標文件鏈接在一起以創建可執行文件。

從命令行,將兩個文件編譯為目標文件

cc -Wall -std=c11 -c main.c

創建main.o

cc -Wall -std=c11 -c file.c

創建file.o

然后鏈接他們

cc -o my-executable main.o file.o

然后你將有一個名為my-executable的可運行二進制my-executable 如果你有一個IDE,將有一個等效的方法來執行上述操作,但它將取決於IDE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM