❶ c語言中,標准main函數的書寫規范是什麼
在最新的 C99 標准中,只有以下兩種定義方式是正確的:
int main( void ) /* 無參數形式 */
{
...
return 0;
}
int main( int argc, char *argv[] ) /* 帶參數形式 */
{
...
return 0;
}
int指明了main()函數的返回類型,函數名後面的圓括弧一般包含傳遞給函數的信息。void表示沒有給函數傳遞參數。關於帶參數的形式,我們等會討論。
瀏覽老版本的C代碼,將會發現程序常常以。
main()
這種形式開始。C90標准允許這種形式,但是C99標准不允許。因此即使你當前的編譯器允許,也不要這么寫。
你還可能看到過另一種形式。
void main()
有些編譯器允許這種形式,但是還沒有任何標准考慮接受它。C++ 之父 Bjarne Stroustrup 在他的主頁上的 FAQ 中明確地表示:void main( ) 的定義從來就不存在於 C++ 或者 C 。所以,編譯器不必接受這種形式,並且很多編譯器也不允許這么寫。
❷ ANSI C語言標准
由ANSI標準定義的C語言關鍵字共32個 :
auto double int struct break else long switch
case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile do if while static
根據關鍵字的作用,可以將關鍵字分為數據類型關鍵字和流程式控制制關鍵字兩大類。
1 數據類型關鍵字
A基本數據類型(5個)
void :聲明函數無返回值或無參數,聲明無類型指針,顯式丟棄運算結果
char :字元型類型數據,屬於整型數據的一種
int :整型數據,通常為編譯器指定的機器字長
float :單精度浮點型數據,屬於浮點數據的一種
double :雙精度浮點型數據,屬於浮點數據的一種
B 類型修飾關鍵字(4個)
short :修飾int,短整型數據,可省略被修飾的int。
long :修飾int,長整形數據,可省略被修飾的int。
signed :修飾整型數據,有符號數據類型
unsigned :修飾整型數據,無符號數據類型
C 復雜類型關鍵字(5個)
struct :結構體聲明
union :共用體聲明
enum :枚舉聲明
typedef :聲明類型別名
sizeof :得到特定類型或特定類型變數的大小
D 存儲級別關鍵字(6個)
auto :指定為自動變數,由編譯器自動分配及釋放。通常在棧上分配
static :指定為靜態變數,分配在靜態變數區,修飾函數時,指定函數作用域為文件內部
register :指定為寄存器變數,建議編譯器將變數存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數
extern :指定對應變數為外部變數,即在另外的目標文件中定義,可以認為是約定由另外文件聲明的韻蟮囊桓觥耙�謾?
const :與volatile合稱「cv特性」,指定變數不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)
volatile :與const合稱「cv特性」,指定變數的值有可能會被系統或其他進程/線程改變,強制編譯器每次從內存中取得該變數的值
2 流程式控制制關鍵字
A 跳轉結構(4個)
return :用在函數體中,返回特定值(或者是void值,即不返回值)
continue :結束當前循環,開始下一輪循環
break :跳出當前循環或switch結構
goto :無條件跳轉語句
B 分支結構(5個)
if :條件語句
else :條件語句否定分支(與if連用)
switch :開關語句(多重分支語句)
case :開關語句中的分支標記
default :開關語句中的「其他」分治,可選。
C 循環結構(3個)
for :for循環結構,for(1;2;3)4;的執行順序為1->2->4->3->2...循環,其中2為循環條件
do :do循環結構,do 1 while(2); 的執行順序是 1->2->1...循環,2為循環條件
while :while循環結構,while(1) 2; 的執行順序是1->2->1...循環,1為循環條件
以上循環語句,當循環條件表達式為真則繼續循環,為假則跳出循環。
參考資料: http://www.cnblogs.com/atticstudio/archive/2010/02/06/1665153.html
❸ C語言在世界上有幾個標准
最初是有ANSI C標准,然後ANSI把這個標准提交到ISO(畢竟ISO是國際化標准組織),ISO採納為國家標准。ISO C與ANSI C內容基本相同,主要是格式組織不一樣。這個標準是89年發布的,通常稱為C89.
99年ISO發布了新的C標准,通常稱為C99.
因為ANSI與ISO的C標准內容基本相同,所以對於C標准,可以稱為ANSI C,也可以說是ISO C,或者ANSI/ISO C。
此外沒有C標准。不存在什麼GNU C標准。
GNU計劃中含多個內容,其中包括開發C/C++編譯器。這個編譯器通常簡稱為GCC(GNU C/C++ compiler)
總而言之,ANSI/ISO C是語言標准。GCC是具體的編譯器,它必須符合ANSI/ISO C標準的要求。
❹ 國際上C語言常見的三個標準是什麼
C89 C90 C99
C語言是一門高級計算機編程語言,設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
❺ C語言書寫格式標準是什麼
你的錯誤是沒加頭文件,因為使用printf需要調用庫函數 stdio.h。
符號名包括模塊名、常量名、標號名、子程序名等。這些名字應該能反映它所代表的實際東西,具有一定的意義,使其能夠見名知義,有助於對程序功能的理解。命名採用匈牙利命名法。具體規則如下:
(1)所有宏定義、枚舉常數和const變數,用大寫字母命名。在復合詞里用下劃線隔開每個詞。
(2)復合詞中每個單詞的第一個字母大寫。除了規則5.1.1.1以外,避免使用下劃線。
(3)類、類型定義和枚舉型名的第一個字母大寫。
(4)函數名是復合詞的,第一個詞採用全部小寫,隨後每個單詞採用第一個字母大寫,其它字母小寫方式;如果是單個詞的,採用全部小寫方式。
(5)循環變數可採用i, j, k等,不受上述規則限制。
(6) 類的成員變數應採用m_開頭。
(7) 全局變數詞頭為g_ 。
(8) 臨時變數詞頭為tmp_ 。
(9) 對結構體內的變數命名, 遵循變數的具體含義命名原則
(10)用小寫字母的前綴表示變數的類型,前綴的下一個字母用大寫。
——文件之中不得存在無規則的空行,比如說連續十個空行。
一般來講函數與函數之間的空行為2-3行;
在函數體內部,在邏輯上獨立的兩個函數塊可適當空行,一般為1-2行。
——程序編寫首先應考慮清晰性,不要刻意追求技巧性而使得程序難以理解。
——每行長度盡量避免超過屏幕寬度,應不超過80個字元。
——除非對效率有特殊要求,編寫程序要作到清晰第一,效率第二。
——盡可能使用函數庫。
——盡量用公共過程或子程序去代替重復的功能代碼段。要注意,這個代碼應具有一個獨立的功能,不要只因代碼形式一樣便將其抽出組成一個公共過程或子程序。
——使用括弧清晰地表達算術表達式和邏輯表達式的運算順序。如將 x=a*b/c*d 寫成 x=(a*b/c)*d可避免閱讀者誤解為x=(a*b)/(c*d)。
——避免不必要的轉移。
——避免採用過於復雜的條件測試。
——避免過多的循環嵌套和條件嵌套。
——建議不要使?*=,^=, /=等運算符。
——一個函數不要超過200行。一個文件應避免超過2000行。
——盡量避免使用go to語句。
——避免採用多賦值語句,如x = y = z ;
——不鼓勵採用?:操作符,如z = (a>b)?a:b;
——不要使用空的if else 語句。
❻ 各種C語言標准與區別
GNU C 允許零長度數組
GNU C 允許定義長度為0的數組,可能很多人會問長度為0的數組有什麼用啊。其實我們可以定義一個長度為0的數組,那麼這個數組是不佔用內存空間的,但是 我們可以通過這個數組來訪問數組後面的數據,比如一個結構體:
struct data_pra
{
char name;
char num[0];
char year;
charr month;
...
};
struct data_pra data;
就可以通過調用data.num[0]獲得year數據,data.num[1]來獲得month的數據。如果他們的類型相同,並且取值范圍相同,我們要對他們進行范圍檢查,這是我們就可以通過for循環來實現,而不需要獲取每個數據的值,再進行取值范圍判斷了。
GNU支持case 取值范圍用法
GNU C 支持case x…y 語法,區間[x,y]的數都會滿足這個case的條件,我們在不考慮if判斷的情況下,如整數a的取值范圍為0-5,當0<3時執行fun1函數,大於等於3時執行fun2();則GNU C可以通過以下代碼實現:
switch(a)
{
case 0..: 2:fun1();
break;
case 3…5: fun2();
break;
}
而不是
switch(a)
{
case 0
case 1;
case 2:
fun1();
break;
case 3:
case 4;
case 5:
fun2();
break;
}
如果條件越多,這種實現方案就越簡單方便。也便於其他人員閱讀代碼。
語句表達式
GNU C把包含在括弧里的復合語句看做是一個表達式,稱為語句表達式,它可以出現在任何允許表達式的地方。可以在語句表達式中使用原本只能在復合語句中使用的循環變數、局部變數等,例如:
#define min_t(type,x,y) ({type __x=(x); type __y=(y);__x<__y?__x:__y})
int ia,ib,mini;
mini=min_t(int,ia,ib);
這樣,因為重新定義了__x和__y這兩個局部變數,所以上述方法定義的宏將不會有副作用。在標准C中,對應的宏通常會有副作用
typeof關鍵字
typeof(x) 可以獲得x的類型,因此,可以藉助typeof重新定義上一條提到的min_t這個宏
#define min(x,y) /
({ /
const typeof(x) _x=(x);/
const typeof(y) _y=(y);/
(void) (&_x==&_y);/
_x<_y ? _x: _y ; })
不需要像上一條時那樣傳一個type進去,因為通過typeof(x)可以得到type。
代碼 (void) (&_x==&_y);的作用是檢查_x和_y的類型是否一致。
可變參數的宏
標准C只支持可變參數的函數,意味著函數的參數可以是不固定的
例如printf()函數的原型是
int printf(const char *format [,argument]…)
而在GNU C中,宏也可以接受可變數目的參數,例如
#define pr_debug(fmt,arg…) printk(fmt,##arg)
這里arg表示其餘的參數可以是零個或多個,這些參數以及參數之間的逗號構成arg的值,
在宏擴展時替換arg ,例如
pr_debug(「%s:%d」,filename,line);
被擴展為
printk(「%s:%d」,filename,line);
使用##的原因是為了處理arg不代表任何參數的情況,這時候,前面的逗號就變得多餘了。
使用##之後,GNU C預處理器會丟棄前面的逗號
pr_debug(「success!/n」) 會被正確擴展為 printk(「success!/n」)
而不是 printk(「success!/n」,);
❼ C語言中的標准函數有哪些
C語言輸入輸出函數有很多,標准I/O函數中包含了如下幾個常用的函數:
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
int getc(FILE *fp)
getc主要是從文件中讀出一個字元.常用的判斷文件是否讀取結束的語句為 (ch = getc(fp)) != EOF.EOF為文件結束標志,定義在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定義在stdlib.h中一樣,文件也可以被理解為一種流,所以當fp為stdin時,getc(stdin)就等同於getchar()了.
int putc(int ch,FILE *fp)
putc主要是把字元ch寫到文件fp中去.如果fp為stdout,則putc就等同於putchar()了.
int getchar(void)
getchar主要是從標准輸入流讀取一個字元.默認的標准輸入流即stdio.h中定義的stdin.但是從輸入流中讀取字元時又涉及到緩沖的問題,所以並不是在屏幕中敲上一個字元程序就會運行,一般是通過在屏幕上敲上回車鍵,然後將回車前的字元串放在緩沖區中,getchar就是在緩沖區中一個一個的讀字元.當然也可以在while循環中指定終止字元,如下面的語句:while ((c = getchar()) != '#')這是以#來結束的.
int putchar(int ch)
putchar(ch)主要是把字元ch寫到標准流stdout中去.
char * gets(char *str)
gets主要是從標准輸入流讀取字元串並回顯,讀到換行符時退出,並會將換行符省去.
int puts(char *str)
puts主要是把字元串str寫到標准流stdout中去,並會在輸出到最後時添加一個換行符.
char *fgets(char *str, int num, FILE *fp)
str是存放讀入的字元數組指針,num是最大允許的讀入字元數,fp是文件指針.fgets的功能是讀一行字元,該行的字元數不大於num-1.因為fgets函數會在末尾加上一個空字元以構成一個字元串.另外fgets在讀取到換行符後不會將其省略.
int fputs(char *str, file *fp)
fputs將str寫入fp.fputs與puts的不同之處是fputs在列印時並不添加換行符.
int fgetc(FILE *fp)
fgetc從fp的當前位置讀取一個字元.
int fputc(int ch, file *fp)
fputc是將ch寫入fp當前指定位置.
int fscanf(FILE *fp, char *format, 輸入列表)
fscanf按照指定格式從文件中出讀出數據,並賦值到參數列表中.
int fprintf(FILE *fp, char *format, 輸出列表)
fprintf將格式化數據寫入流式文件中.
數據塊讀寫函數
fread (buffer,size,count,fp);
fwrite(buffer,size,count,fp);
參數說明:
buffer:是一個指針。
對fread 來說,它是讀入數據的存放地址。
對fwrite來說,是要輸出數據的地址(均指起始地址)。
size: 要讀寫的位元組數。
count: 要進行讀寫多少個size位元組的數據項。
fp: 文件型指針。
❽ c語言考試標准
上機考試有三個題目
1 填空(2-3個空)30分
2 改錯(2-3個錯誤)30分
3 編程40分
1 2 題是按照每個考點的答案給分的也就是說只有和標准答案一致的才是正確的 雖然和標准答案不同也有可能運行正確 但是也不能得分 不過不用擔心這個 因為題目簡單相應的正確答案的種類也少 所以運行正確就OK
3題要求最高 也最靈活 只要能寫出符合題目要求功能的代碼就可以得40分 否則0
你可以買一些關於上機考試的書 (附帶光碟 光碟有模擬的考試系統 我考過2級 它真正的考試系統幾乎一樣) 說白了就是考試題庫 自己多練練就可以過(考試題目是從共有100套題的題庫里隨即抽的 只要能掌握了它就可以)
❾ C語言標准包括哪些
有很多的標准,但基本上對應用不會有太大的干擾。比較重要的標準是C89/C90和C99。而且沒必要去深入研究標准,相比之下,研究編譯器是如何實現標准以及作了哪些擴充,似乎更有意義。