網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論

回覆
 
主題工具
  #1  
舊 2014-05-06, 05:02 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設 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.
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #2  
舊 2014-05-06, 07:58 PM
robowang robowang 目前離線
進階會員
 
註冊日期: 2004-05-22
文章: 372
預設

第三行應改為 int myfunc(int);
回覆時引用此篇文章
  #3  
舊 2014-05-06, 08:30 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設

引用:
作者: robowang 查看文章
第三行應改為 int myfunc(int);


果然正確,請問是為什麼呢?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #4  
舊 2014-05-06, 09:39 PM
robowang robowang 目前離線
進階會員
 
註冊日期: 2004-05-22
文章: 372
預設

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

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

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

原來的宣告 myfunc(void) 跟後來的函數實體 myfunc(int i) 不同, 當然編譯不過
回覆時引用此篇文章
  #5  
舊 2014-05-06, 10:50 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,995
預設

many thanks.

站裡高手確實很多。

能否順便看一下這個?

http://www.domainclub.org/showthread...1#.U2j2i_mSwl0
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
回覆

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 06:47 PM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.