[問題] C語言header file新手問題

看板C_and_CPP作者 (東東)時間15年前 (2010/10/23 20:36), 編輯推噓3(304)
留言7則, 4人參與, 最新討論串1/1
Hi 大家好,我想問一個header file很基礎的問題 我原先一直以為compiler在產生object code時(用-c) 一定要先看到function prototype,否則會compile error 結果我今天試了一下 才發現原來不用? 是我觀念搞錯了嗎? 舉例來說 main.c #include <sdtio.h> int main(void) { abc(); } abc.c #include <stdio.h> void abc() { printf("hi"); } 兩個檔分別compile 再link起來就可以執行 如果是這樣的話 那在c語言裡include header file有什麼好處呢? 剛才試了一下c++,發現compiler在產生object File時如果有用到class member 那一定要看到class 的定義,所以include .h是必要的 那如果c不需要看到function的prototype,那不就完全不用include 任何header file了? 打到一半想說竟然連.h都不用include了,那乾脆把#include <stdio.h>也拿掉 int main(int argc, char**argv) { int i; for (i = 0; i < 10; ++i) { printf("%d\n", i); } return 0; } 沒想到只是有warning msg,還是可以執行... 因為code很短 就沒有用貼程式碼網站了。 煩請大家解惑 Thx -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.67.187

10/23 20:49, , 1F
只是C語言比較寬鬆而已,檔名改成 *.cpp 應該就會錯誤
10/23 20:49, 1F

10/23 21:47, , 2F
如果你沒宣告就直接用的話 會是implict declaration...
10/23 21:47, 2F

10/23 21:47, , 3F
其prototype為 int (*)(...) 看你給什麼參數就是什麼
10/23 21:47, 3F

10/23 21:48, , 4F
但是這樣很危險 因為你的函式實作可能不是這種形態
10/23 21:48, 4F

10/24 00:42, , 5F
看compiler吧,像gcc版本不同檢查嚴格的程度就有差
10/24 00:42, 5F

10/24 05:08, , 6F
2~4樓正確 嚴格說來是不檢查參數回傳 int
10/24 05:08, 6F

10/24 05:09, , 7F
補一個一樓也對 C語言才會這樣 C++就不給了
10/24 05:09, 7F
文章代碼(AID): #1CmjRaj1 (C_and_CPP)