網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   C語言問題請教 (https://www.domainclub.org/showthread.php?t=36520)

哈啦 2014-05-06 05:02 PM

C語言問題請教
 
引用:

#include <stdio.h>

int x=10;

int myfunc(void);

int main(void)
{
int y=x;

int z = myfunc(y);
printf("%d %d",y,z);

return 0;
}

int myfunc(int i)
{
return i/2;
}
myfunc(y)紅字的部份編譯器說too many arguments to function "myfunc",這是照課本上抄的程式,為何有此錯誤?
那該如何寫?
我有試著把myfunc(y)的y拿掉變成myfunc(),但編譯器編到 int myfunc(int i) 又說 [Error] conflicting types for 'myfunc'

please help, thanks.

robowang 2014-05-06 07:58 PM

第三行應改為 int myfunc(int);

哈啦 2014-05-06 08:30 PM

引用:

作者: robowang (文章 191582)
第三行應改為 int myfunc(int);

~yes

果然正確,請問是為什麼呢?

robowang 2014-05-06 09:39 PM

第三行是宣告一個函數的"原型",
意思是告訴編譯程式說:我底下有一個函數, 名稱是 myfunc, 而此函數需要傳進一個 int 值

編譯程式處理到第三行時, 雖然還不知道 myfunc 函數裏的程式碼, 但已經知道存在著 myfunc 這個函數, 以及它需要的參數。
而當編譯程式處理到 int z = myfunc(y); 這一行時, 就會知道這一行程式是在呼叫"底下才會出現的"函數, 而 y 也是 int, 符合 myfunc 的定義, 因此編譯程式就能判斷這一行是正確的語法

函數原型的宣告, 旨在讓編譯程式預先知道函數的名稱與參數等等, 好進行後續的處理
因此, 函數原型的宣告, 必須符合後面函數的實體, 否則編譯就會出問題

原來的宣告 myfunc(void) 跟後來的函數實體 myfunc(int i) 不同, 當然編譯不過

哈啦 2014-05-06 10:50 PM

many thanks.

站裡高手確實很多。~yes

能否順便看一下這個??:teeth

http://www.domainclub.org/showthread...1#.U2j2i_mSwl0


所有時間均為 +8。現在的時間是 04:50 PM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.