在hrec.h宣告
void myprint(void)
在hrec.c
void myprint(void)
{
printf("ab\n");}
在hvi.c
#include"hrec.h"
在函式里呼叫
myprint();
運行報錯
unresolved external symbol _myprint
可以呼叫hrec.c的其他函式,其他函式是本來就有的,myprint是我自己加的,為啥不行?
uj5u.com熱心網友回復:
//h 檔案
#include "stdio.h"
void teset(void);
//c檔案
#include "text.h"
void teset(void)
{
printf("AA");
}
//主程式
#include "stdio.h"
#include "text.h"
int main()
{
while(1)
{
teset();
}
}
測驗沒有問題.
uj5u.com熱心網友回復:
我自己建了個工程試了一下也沒問題,我覺得只要找到了函式宣告,工程會在整個工程內部自己找定義,不知道為啥這里不行。可是hrec.c的其他函式能呼叫啊,我讀的這套程式比較老了,而且還是用nmake編譯,頭大uj5u.com熱心網友回復:
我自己建了個工程試了一下也沒問題,我覺得只要找到了函式宣告,工程會在整個工程內部自己找定義,不知道為啥這里不行。可是hrec.c的其他函式能呼叫啊,我讀的這套程式比較老了,而且還是用nmake編譯,頭大uj5u.com熱心網友回復:
make編譯得包含實作檔案uj5u.com熱心網友回復:
對編譯和鏈接的理解還是很成問題的。學校里好象不教這些東西吧?參考頭檔案只是幫助編譯器識別函式的“樣子”并順利產生目標檔案,這一階段只是決定如何呼叫函式,不需要知道函式的實際位置和內容。
但是在鏈接階段,聯結器需要找到函式的定義。
想一想,這兩步,卡在哪一步了。
uj5u.com熱心網友回復:
你都可以用hrec的其他函式了 那應該是沒有問題的 是不是你修改的了檔案沒有編譯到 你要不把檔案洗掉再編譯 報錯后再恢復 重新編譯 這樣確保編譯器識別了你的修改uj5u.com熱心網友回復:
我有點弄暈了,這個簡單的函式我后來又試了一下是沒問題的,因為我一開始在函式里面有引數,我記得宣告時可以只寫型別不寫引數名稱,編譯時遇到問題,檢查了幾遍不知道啥問題,后來才發現是宣告時沒寫引數名,可能我用的編譯器版本太老標準太老,總之我記得現在大多數在宣告時可以只寫型別的,可能早期標準必須宣告和定義一模一樣吧,謝謝大家了,調來調去有時候真想不到問題出在哪里uj5u.com熱心網友回復:
我有點弄暈了,這個簡單的函式我后來又試了一下是沒問題的,因為我一開始在函式里面有引數,我記得宣告時可以只寫型別不寫引數名稱,編譯時遇到問題,檢查了幾遍不知道啥問題,后來才發現是宣告時沒寫引數名,可能我用的編譯器版本太老標準太老,總之我記得現在大多數在宣告時可以只寫型別的,可能早期標準必須宣告和定義一模一樣吧,謝謝大家了,調來調去有時候真想不到問題出在哪里轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/25898.html
標籤:C語言
上一篇:c++知識點練習,求解
下一篇:佇列的鏈表存盤實作(純代碼演示)
