同樣的代碼為什么別人的就對(duì)了 引用的代碼我沒動(dòng)
#include <stdio.h>
#include "test.c"? ?//引用test.c文件
extern void printLine()? ? ?//這里定義的方法對(duì)嗎?
{
? ?printf("**************\n");? ?
}
int main()
{
? ? say();
? ? return 0;
}
#include <stdio.h>
#include "test.c"? ?//引用test.c文件
extern void printLine()? ? ?//這里定義的方法對(duì)嗎?
{
? ?printf("**************\n");? ?
}
int main()
{
? ? say();
? ? return 0;
}
2019-02-07
舉報(bào)
2019-03-03
如果你“ ?//#include "test.c" ? //引用test.c ?”文件這一語句就可以不用加static.你編譯也不會(huì)錯(cuò)
原因是1test.c中需要引用hello.c中的printline(); ?而這里就是屬于引用外部函數(shù)
? ? ? ? 2而我在test.c中加static就確定了程序的執(zhí)行順序也就是test.c先引用hello.c中的printline(),而不是hello.c先引用say.
? ? ? ? 3我認(rèn)為這里會(huì)報(bào)錯(cuò)是因?yàn)橹貜?fù)引用和程序的不確定定性而產(chǎn)生的而且你會(huì)發(fā)現(xiàn)test.c中沒有main函數(shù)。
前面學(xué)的這里不說了
在此聲明我也才剛學(xué)C語言如果有更好的見解一定要和我分享啊!!
有錯(cuò)誤請(qǐng)指出謝謝
2019-02-21
注意到第二個(gè)源文件也就是test.c【后面將用T代替】調(diào)用了第一個(gè)源文件hello.c【后面將用H代替】中的函數(shù),因此我們先將H中被T調(diào)用的函數(shù)printLine()修改為外部函數(shù)也就是加上一個(gè)extern,這樣T也就是一個(gè)正常的源文件了。? ?現(xiàn)在討論兩種情況:
A。當(dāng)我們把T編譯為靜態(tài)函數(shù)的時(shí)候——static say()? ?,我們?cè)贖若要使用T的這個(gè)靜態(tài)函數(shù),這需要將他調(diào)用過來,而一個(gè)靜態(tài)函數(shù)是無法直接調(diào)用的,此時(shí)我們需要先引入say()函數(shù)所在的源文件,也就是H中的第二行代碼的用意。? ? ?
B。當(dāng)我們把T編譯為動(dòng)態(tài)函數(shù)的時(shí)候——say()或者extern say()【因?yàn)閑xtern可以省略】,我們?nèi)粢贖中使用T的這個(gè)函數(shù)say()那么我們可以直接調(diào)用,因?yàn)閟ay()是一個(gè)外部函數(shù),無需引入其所在的源文件T也就是不需要H的第二行,因此會(huì)有人說“只要把第二行注釋掉就行了”其實(shí)這句話的前提是say()是一個(gè)外部函數(shù)。
2019-02-09
就是你必須明確這兩個(gè)源文件的關(guān)系,以及他們?nèi)绾握{(diào)用。不然會(huì)出現(xiàn)程序混亂!
2019-02-09
把第二個(gè)改為
#include <stdio.h>
static void say(){
? ? printLine();
? ? printf("I love imooc\n");
? ? printf("good good study!\n");
? ? printf("day day up!\n");
? ? printLine();
}
在test.c的里 void say()前加上static就可以了