① 在C語言程序中,只有main函數才可單獨進行編譯,哪裡錯了
有函數的都可以單獨進行編譯,編譯是指把程序語句翻譯為機器代碼,對於C語言就是把.c文件翻譯為.obj文件。
此外,必須要有main函數的才可以完成連接為exe文件。
② C語言里如何編譯庫函數最好舉例,詳細點的!
太長了發2部分給你ok學習任何知識,循序漸進總是最好的方式。不幸的是,很多人明知這個道理,卻總是想走所謂的捷徑。如果你是一個剛剛開始學習編程的中學生,或者你是一個剛剛進入計算機學院的本科生,又或者你是一個決心在計算機領域有所建樹的初學者,你一定迫切地想知道,學習計算機技術,究竟應該從哪裡下手。 我的建議是:數學、英語、C語言。 為什麼C語言如此重要?我們從學習方法開始說起。書本上描述的東西,倘若不經過我們的親自實踐,是難以被徹底消化吸收的。計算機組成原理講解了浮點數的格式,如果我們能看到並分析內存或寄存器中某個浮點數的表示,那比單純的紙上談兵要強一千倍;數據結構與演算法似乎很難,如果你能把書上的例子實現出來,然後把習題做完,只需啃完一本好書,你也可以是演算法高手;操作系統原理其實不僅僅是原理,只有做一些內核方面的實驗才能真正有深刻理解;還有許多新潮的技術,比如JavaEE、PHP、Ajax、.NET等等等等,很多高手學習這些技術只需要很短的時間,不必說,他們肯定是C語言的高手。C語言幾乎是一切計算機技術的通用工具,包括計算機的各種基本理論。沒有精通C語言的決心,就不要涉足計算機領域。 為什麼是C語言而不是C++不是Java不是其它?因為C語言最簡單。你需要掌握一個語言工具,但也許並不需要「面向對象」、「模板」、「函數重載」等等一大堆概念。C語言足夠低級,非常非常地貼近計算機的底層結構,不會讓你迷失在概念的汪洋大海。除了「指針」,C語言沒有真正意義上的難點,而「指針」,恰恰是理解計算機底層結構精髓的關鍵所在 所以,初學者們不必思考應該學什麼,等把C語言精通了,你自己便會知道下一步如何去走。如果你對操作系統內部感興趣,你便可以試著研究一下Unix的內核,除了C語言,你還需要一些匯編語言和保護模式的知識;如果你對演算法感興趣,那麼恭喜你,C語言足夠使用了;如果你對Windows編程感興趣,去看看《Windows程序設計》吧,作者清楚的告訴你「只需要C語言的基礎」;如果你對任何其它語言感興趣,盡管去學吧,不過還是建議先學C++,因為你需要一些「面向對象」的知識。 一、要讀就讀好書,否則不如不讀 大名鼎鼎的譚浩強教授出了一本《C語言程序設計》,據說發行量有超過400萬,據我所知,很多學校都會推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無比堅定地黑他這本書的。這本書不是寫給計算機專業的學生的,而是給那些需要考計算機等級考試的其它專業學生看的。這本書的主要缺點是:例子程序非常不專業,不能教給你程序設計應該掌握的思考方式;程序風格相當地不好,會讓你養成亂寫代碼的惡習;錯誤太多,曾經有人指出過這本書的上百個錯誤,其中不乏關鍵的概念性錯誤。好了,這本書我也不想說太多了,有興趣大家可以網路一下。 Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設計語言》)堪稱經典中的經典,不過舊版的很多內容都已過時,和現在的標准C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言標準的詳細描述,包括絕大多數C標准庫函數的細節,算得上是最好的標准C語言的工具書。順便提一句,最新的《C程序設計語言》是根據C89標准修訂的,而《C語言參考手冊》描述的是C99標准,二者可能會有些出入,建議按照C99標准學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《Pointers on C》,特別地強調指針的重要性,算是本書的一個特點吧。不過這本書並不十分適合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很扎實,那麼你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。 如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,內容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些歷史也不是什麼壞事。
③ C語言怎樣讓別人看不到自己所編函數的內容,但只可以用我的函數
把自己的程序編譯成 .o文件,然後,讓別人去鏈接你的.o文件去生成執行程序就可以了。
④ c語言中如何編譯含頭文件的函數
在使用頭文件聲明的函數或結構的文件中添加#include"該頭文件"
一般來說該頭文件和.c文件同一目錄,或者放到編譯器能自動找到的位置
⑤ c語言課程設計里怎樣把一個函數單獨拿出來運行
想單獨拿來運行,自己新建工程,建文件,寫一個main入口函數,然後把這個函數復制main函數上面(不需要聲明),或者下面(需要聲明),最後在main里調用函數就可以了。
調用一個函數語言先了解其返回值和參數。在函數名左邊的就是返回值類型(表示調用的時候用什麼類型變數來接收,如不需要處理返回值,也可以不接收)。在函數右邊的括弧里就是參數,逗號分割,你要根據參數個數和類型在調用時括弧里寫對應的值或者變數。
⑥ C語言中如何將自己常用的函數封裝到編譯器的庫函數中具體應該怎麼做呢
編寫好的代碼放入到一個頭文件裡面,比如放入到 #include "myhead.h" ,然後將這個頭文件放入你編譯器的一個文件夾叫做 :include 文件夾裡面,include 文件夾就是你編譯器自動去尋找頭文件的地方了,比如 #include <stdio.h>就是在裡面的,你把你的頭文件放入到裡面去就行了,下次調用的話就不用 #include "myhead.h",而可以直接像調用系統的頭文件一樣,#include <myhead.h>
⑦ c語言調用其他文件的函數怎麼編譯
調用函數庫的話用#include<XXX.h>或者#include"XXX.h"區別是你庫文件放在同一個文件夾還是在IDE的安裝目錄下面,如果你庫文件在你工程文件夾裡面用#include<XXX.h>,否則用#include"XXX.h"
如果你說自己寫庫的話是需要兩個宏命令,#ifndef_XXX_H#define_XXX_H,然後你函數名用extern表示
如果你說編譯的話,你應該說的是編譯原理吧,你可以反匯編一下一個編譯好的程序,如果該處編譯了一個其他函數庫的函數,你可以看到程序把參數PUSH到內存後CALL或者LCALL了一個這個函數的地址,這就完成了匯編中調用函數的部分,我記得X86裡面CALL的機器碼是E8H吧,有興趣的話可以自己用反匯編看一下
這個CALL的話就是調用函數的功能
⑧ c語言中的函數可不可以單獨進行編譯為什麼
因為C語言中你編寫的函數中用到了基本的比如輸出,定義這些,這些都是頭文件裡面寫好的,如果你要單獨編譯,可以自己把這些東西定義在一個文件中,自己重新寫一遍,另外還得編譯器支持。
⑨ c語言中怎麼調用自己定義的函數
在使用一個函數之前必須先對他進行聲明:
//void B();聲明B函數的存在。void A(){B();//非法,程序執行到此時並不知道B函數的存在。}void B(){}
或者
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int fa(int n)
{
int a;
for(a=2;a<=sqrt(n*1.0),n%a!=0;a++);
if(a>sqrt(n*1.0))
return(1);
else
return(0);
}
void main( )
{
int n,q;
scanf("%d",&n);
(9)c語言如何只編譯用到的函數擴展閱讀
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int fa(int n)
{
int a;
for(a=2;a<=sqrt(n*1.0),n%a!=0;a++);
if(a>sqrt(n*1.0))
return(1);
else
return(0);
}
void main( )
{
int n,q;
scanf("%d",&n);
if(fa(n)==1)
printf("n");
else
printf("y");
system("pause");
exit(0);
}
⑩ c語言如何實現函數的調用
如何調用C語言寫的庫,如a.lib等,有對應的庫頭文件a.h。假設a.h中定義了函數:
int
WhyCoding(int
a,
float
b);
做法是,
/*
cpp_a.h
*/
extern
"C"
{
#include
"a.h"
}
或
/*
cpp_a.h
*/
extern
"C"
{
int
WhyCoding(int
a,
float
b);
/*
重定義所有的C函數
*/
}
從上面可以看出,extern
"C"
是用在C和C++之間的橋梁。之所以需要這個橋梁是因為C編譯器編譯函數時不帶
函數的類型信息,只包含函數符號名字,如C編譯器把函數int
a(float
x)編譯成類似_a這樣的符號,C連接器只要
找到了調用函數的符號,就可以連接成功,它假設參數類型信息是正確的,這是C編譯連接器的缺點。而C++
編譯器為了實現函數重載,編譯時會帶上函數的類型信息,如他把上面的a函數可能編譯成_a_float這樣的
符號為了實現重載,注意它還是沒有帶返回值得信息,這也是為什麼C++不支持採用函數返回值來區別函數
重載的原因之一,當然,函數的使用者對函數返回值的處理方式(如忽略)也是重要原因。
基於以上,C調用C++,首先需要用封裝函數把對C++的類等的調用封裝成C函數以便C調用,於是extern
"C"
的
作用是:讓編譯器知道這件事,然後以C語言的方式編譯和連接封裝函數.(通常是把封裝函數用C++編譯器按C++
方式編譯,用了extern
"C"
後,編譯器便依C的方式編譯封裝介面,當然介面函數裡面的C++語法還是按C++方式
編譯;對於C語言部分--調用者,還是按C語言編譯;分別對C++介面部分和C部分編譯後,再連接就可以實現C
調用C++了).
相反,C++調用C函數,extern
"C"
的作用是:讓C++連接器找調用函數的符號時採用C的方式,即使用_a而不是
_a_float來找調用函數。