c語言中的函數不能直接編譯
一般來說編譯過後就成了基本上能執行的2進制代碼。但是這些2進制代碼並不完善,一個程序往往需要調用不止一部分的代碼,所以需要把這些代碼全部整合起來才能執行。
即時你的程序看起來只有一個文件,但是編譯過後,多多少少裡面至少會調用到一些操作系統功能,和其它的一些設置,所以依然需要組建這個過程把這個程序和這些系統默認的代碼組建起來形成一個完成、單一的可執行文件。所以一般組建過程就包含了組建內部和外部代碼,一般來說內部代碼就是我說的系統預留的必要的一些代碼(例如怎麼具體完成把一些字元顯示在屏幕上呀這些功能),而外部代碼就是額外的調用自己寫得或者別人寫得其它程序功能(往往當你的程序調用了非c標准函數的時候)。
所以就算你的代碼可以編譯,但是可能因為組建並不成功(例如需要組建的代碼本身有bug,或者丟失,或者版本不匹配),你的程序依然可能無法正確運行。
㈡ 「C語言的預處理 不能實現宏定義和條件編譯的功能」和「C語言的預處理不能實現宏定義和條件編譯的功能」
這兩句話是一個意思, C語言中的預處理,是可以實現宏定義和條件編譯功能的。比如下面的代碼定義了一個宏S,它的值是」hello world ",可以用printf函數直接列印出來。
#include<stdio.h>
#defineS"helloworld "
intmain()
{
printf(S);
return0;
}
C語言中的預處理也可以實現條件編譯功能,預處理到現在依然存在的一個重要原因就在於此。比如下面的代碼:
#include<stdio.h>
intmain()
{
#ifdef_DEBUG
printf("程序生成的debug版 ");
#else
printf("程序生成的是release版 ");
#endif
return0;
}
㈢ C語言中的函數不可以單獨進行編譯。這句話為什麼不對
C語言中的函數可以單獨進行編譯,編譯為目標文件,要鏈接成可執行文件時,需要主函數以及庫。
㈣ 在c語言中,把兩個函數放在兩個程序文件中,怎樣作為兩個文件進行編譯,連接和運行
不知道你用的是什麼編譯器,如果用的是VC的話,可以嘗試下我的做法:
創建兩個源代碼文件:1.cpp和2.cpp
1.cpp中內容:
#include<stdio.h>
#include"2.cpp"/*採用包含命令調用2.cpp中的函數*/
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int a,b,m,n;
a=10;
b=30;
m=max(a,b);
n=min(a,b);
printf("%3d%3d\n",m,n);
return 0;
}
2.cpp中內容:
int min(int x,int y)
{
return x<y?x:y;
}
把這兩個源代碼放到一個文件夾下,編譯並運行1.cpp即可。注意,2.cpp中沒有main函數,所以不能直接編譯2.cpp。其實由於最終1.cpp和2.cpp要連接到一起形成一個可執行文件1.exe,所以2.cpp中也不能有main函數。
㈤ C語言中一個函數如果在主函數中沒有調用,會被編譯么
會的,當你運行時,編譯器還要檢查你的函數是否有格式或其它錯誤!
㈥ ubuntu中編譯C語言程序時使用數學函數時總是出問題編譯不能通過,這要怎麼解決呢
math在連接時需要添加參數,很久不搞linux的程序了,我映像是-o 編譯時加上 -lm像下面這樣:
gcc -lm -o xxx.out xxx.c
因為math.h不是C運行庫函數,就像linux下線程函數庫pthread.h也不是,都需要在編譯時連接該庫
如果你有IDE(如eclipse)+ GCC 開發C程序,可以在項目屬性中編譯命令中添加-lm,作用是一樣的 (本人用VI很不熟練。。。)
樓主如果需要可以到www.eclipse.org下載IDE,不用手動添加Mingw和GCC,它已經全部搞定了,用起來很方便。
㈦ 在C語言程序中,只有main函數才可單獨進行編譯,哪裡錯了
有函數的都可以單獨進行編譯,編譯是指把程序語句翻譯為機器代碼,對於C語言就是把.c文件翻譯為.obj文件。
此外,必須要有main函數的才可以完成連接為exe文件。