Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

c&c++的基礎問題 #include ”stdafx.h”

我們的程設老師問我們說

一個程式如果刪掉 #include <stdio.h>會怎樣

EX

#include <stdio.h>

int main( void )

{

printf( "Welcome to C!\n" );

return 0; /* indicate that program ended successfully */

}

請問#include <stdio.h> 代表的意義是什麼?

為什麼我刪掉他並不會出現什麼奇怪的狀況阿

這句程式碼很重要嗎?代表的意義是什麼呢?

且為什麼我刪掉

#include "stdafx.h"

這程式碼會不能執行呢?

Update:

可是我如果刪掉#include <stdio.h>

一樣會出現 Welcome to C!

你不是說刪掉#include <stdio.h> ,printf就不能用了嗎?

那為什麼還是會出現Welcome to C!

Update 2:

Visual C++ 2005

3 Answers

Rating
  • 1 decade ago
    Favorite Answer

    #include 所引用的是 "標頭檔",這些檔案是預先寫來方便使用者引用,而不必另外寫一段程式而存在的。

    你上面那段程式碼,若把 stdio.h 的標頭檔刪除,基本上在編譯程式讀取到 printf 這個指令時,一定會出錯,原因是未宣告(undeclared -first use the funtion)。在這個 stdio.h 的檔案中已經幫你寫好 printf 指令如何執行(也就是輸出文字),因此必須事先引用這段程式。

    假設不想使用這個標頭檔怎麼辦?當然可以,不過你得另外自己在程式中寫一段 printf 的執行方法以及功能。

    反而 stdafx.h 加入後也沒用,因為裡面沒有寫到 printf 所執行的方法。

    2007-10-14 21:54:02 補充:

    補充一下

    標頭檔案基本上部分都會存放在編譯程式的資料夾內

    例如 dev-cpp 來說,他會放在 \Dev-Cpp\include 裡面

    如果你真的有興趣(或者太閒),可以用程式打開看看裡面寫什麼

    2007-10-15 00:05:37 補充:

    你使用的編譯程式?

    我使用的是Dev Cpp..

    2007-10-15 08:35:03 補充:

    那我不太清楚了,我是寫 C 語言的@@

    C 跟 C++ 有點不同

    請其他人幫忙補充吧

    (或許是 VC++ 本身就自動會加入標頭也說不定XD)

    2007-10-15 08:36:03 補充:

    (原來已經有高手補充了Orz)

    Source(s): 有點說不清楚Orz 我算是初等 ... 不過有疑問可以補充
  • SiYu
    Lv 5
    1 decade ago

    C 語言對沒有宣告的function 你使用他

    compiler 的預設做法.

    把此funciont 的回傳value 當作是int .

    傳入的參數不檢查.

    所以compiler 會過. 但是會給於warning 的警告.

    接這會進入linker 產生可執行檔. 這時會到lib 中去找function 找不到會有linker error . linker 時只會真對function name 做比對. 因此用了錯誤的呼叫方法. 也不會撿查出錯誤.

    以上說的是C 不是C++ . 不過. 建議. 還是乖乖的宣告function 比較好.

    2007-10-15 17:01:15 補充:

    至於C++ 呢.

    沒宣告. 就是不能用. 一定是error

    在來

    stdafx.h 這個特別的 .h 檔是M$ 獨特發明的.

    如果你是用M$ 的工具自動產生他的project file. 大部份狀況下都會啟用此功能. 這個東西是用來告訴compiler 我有一個預先compiler 好的header 檔. 請compiler 不要在去compiler stdafx.h 中include 的檔案了.

    為什麼要這樣做. 因為windows 的程式. 的include 資料實在是太多了. 光 #include<windows.h> 就要compiler 10 萬行的header file.

    2007-10-15 17:12:34 補充:

    所以. stdafx.h 的存在是為了加快compiler 的速度.

    您可以把他拿掉. 但是相對的. 也要把預先compiler header 檔的功能設定修改.

    如是用VC++ 2005 Express edition 可menu/Project/property (直接按alt-f7 也可以)

    然後在畫面上選C/C++/Precompiled headers 在右邊的畫面第一個選項改成not using Precompiled Headers. 就不會用到預先compiler header file 的功能.

  • 1 decade ago

    C 〝可以說〞是會〝自動〞 include stdio.h

    但,C++ 不會喔!

    C 會自動 include 一些 常用的東東。

    (詳細包含哪些,抱歉,沒研究。)

    但,盡量不要靠它!

    該 include 的,就去 include!

    header file 基本上是設計來做宣告用的。

    宣告你會用些什麼,如:函數、變數、巨集。

    (當然,你也可以違反規定,把程式放在裡面;但不鼓勵這麼做!)

    2007-10-15 00:27:20 補充:

    在 C,沒有宣告過的東東,一律不可用!

    一但宣告過,Compiler 就會假設它存在,好好的 compile。

    如果宣告的那東西是你程式裡有的,它就直接寫進去了;

    如果那個 .C 檔裡找不到,它就在最後產生的 .obj 檔,裡面說:

     我要用 xxx,Linker 你找找看,找到就把它 link 起來。

     (它可能是你寫在別的 .C 檔裡的東東,可能是在別的 .lib 裡。)

    Linker 會在你指定的程式庫 (.lib) 裡及所有你指定的 .obj 裡去尋寶。

    找到,就把它 link 起來;

    沒找到,就顯示 找不到 xxxx。

    2007-10-15 00:28:44 補充:

    所以,你若會宣告 #stdafx.h 裡你要用的所有東西,

    你可以在你的 .C 最前面自己宣告,而不用 #include <stdarf.x>

    compile 照樣會成功!

    (極度不鼓勵這麼做,這只是理論上可行!

     但會有很多的問題!)

    因為 C 會〝自動〞宣告一些常用的東東,如:printf;

    所以,你沒 include stdio.h,在 C 的 compiler 不會有問題!

    你把你的 .C 改名為 .CPP 重 compile 看看!

    應該會有錯!

Still have questions? Get your answers by asking now.