當前位置:首頁 » 編程語言 » c語言靜態斷言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言靜態斷言

發布時間: 2023-08-28 12:33:35

1. C程序的基本組成單位是

C程序的基本組成單位是函數,不是C語句。c語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。

C程序語言是結構式語言,顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。

C語言既有高級語言的特點,又具有匯編語言的特點;既是一個成功的系統設計語言,又是一個實用的程序設計語言;既能用來編寫不依賴計算機硬體的應用程序,又能用來編寫各種系統程序。

(1)c語言靜態斷言擴展閱讀:

2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)再次發布了C語言的新標准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,簡稱C11標准,原名C1X。這是C語言的第三個官方標准,也是C語言的最新標准。

新的標准提高了對C++的兼容性,並增加了一些新的特性。這些新特性包括:

1.對齊處理(Alignment)的標准化(包括_Alignas標志符,alignof運算符, aligned_alloc函數以及<stdalign.h>頭文件。

2._Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。

3._Generic 關鍵字。

4.多線程(Multithreading)支持,包括:

_Thread_local存儲類型標識符,<threads.h>頭文件,裡麵包含了線程的創建和管理函數。

_Atomic類型修飾符和<stdatomic.h>頭文件。

5.增強的Unicode的支持。基於C Unicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字元串轉換函數的頭文件<uchar.h>.

6.刪除了gets() 函數,使用一個新的更安全的函數gets_s()替代。

7.增加了邊界檢查函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。

8.增加了更多浮點處理宏。

9.匿名結構體/聯合體支持。這個在gcc早已存在,C11將其引入標准。

10.靜態斷言(static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。

11.新的fopen() 模式,(「…x」)。類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。

12.新增 quick_exit() 函數作為第三種終止程序的方式。當exit()失敗時可以做最少的清理工作。

參考資料:網路-c語言



    2. C語言中while的用法

    C語言中while的用法解析如下:

    一、1表示true,在bool類型取值false和true,0為false,非0為true(例如-1和2都是true)。程序中,這里1就表示永真,直到循環體內遇到break。

    二、while用法演示解析:

    1、含義:While 循環會在指定條件為真時循環執行代碼塊。

    2、語法如下:(如果忘記增加條件中所用變數的值,該循環永遠不會結束。該可能導致程序崩潰。)

    (2)c語言靜態斷言擴展閱讀:

    比較 for 和 while循環:

    for循環控制變數的初始化和修改都放在語句頭部分,書寫形式較簡潔,且適用於循環次數已知的情況。在循環語句中定義一個局部變數,循環結束後,局部變數就被釋放了。

    而while循環控制變數的初始化一般放在while語句之前,循環控制變數的修改一般放在循環體中,形式上不如for語句簡潔,但它比較適用於循環次數不易預知的情況(用某一條件控制循環)。

    兩種形式各有優點,但它們是等價的,可以相互轉換。

    3. 簡述C語言中有哪些常用表達式

    這種東西簡述不了,我給你來份大全
    C語言語法參考大全(流程式控制制語句)----------------------------------------------------------------------------------------------------------01條件語句的一般形式為:if(表達式) 語句1;else 語句2;上述結構表示: 如果表達式的值為非0(TURE)即真, 則執行語句1, 執行完語 句1從語句2後開始繼續向下執行; 如果表達式的值為0(FALSE)即假, 則跳過語句1而執行語句2。注意: 1. 條件執行語句中"else 語句2;"部分是選擇項, 可以預設, 此時條件語句變成:if(表達式) 語句1;表示若表達式的值為非0則執行語句1 , 否則跳過語句1繼續執行。 2. 如果語句1或語句2有多於一條語句要執行時, 必須使用"{"和"}" 把這些語句包括在其中, 此時條件語句形式為:if(表達式){ 語句體1;}else{ 語句體2;}3. 條件語句可以嵌套, 這種情況經常碰到, 但條件嵌套語句容易出錯, 其原因主要是不知道哪個if對應哪else。例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("Bad");對於上述情況, Turbo C2.0規定: else語句與最近的一個if語句匹配, 上例中的else與if(y<=100&&y>x)相匹配。為了使else與if(x>20||x<-10)相匹配, 必須用花括弧。如下所示:if(x>20||x<-10){ if(y<=100&&y>x) printf("Good");}else printf("Bad");4. 可用階梯式if-else-if結構。階梯式結構的一般形式為:if(表達式1) 語句1;else if(表達式2) 語句2;else if(表達式3) 語句3; . .else 語句n;這種結構是從上到下逐個對條件進行判斷, 一旦發現條件滿點足就執行與它有關的語句, 並跳過其它剩餘階梯; 若沒有一個條件滿足, 則執行最後一個else語句n。最後這個else常起著"預設條件"的作用。同樣, 如果每一個條件中有多於一條語句要執行時, 必須使用"{"和"}"把這 些語句包括在其中。02switch語句在編寫程序時, 經常會碰到按不同情況分轉的多路問題, 這時可用嵌套if-else-fi語句來實現, 但if-else-if語句使用不方便, 並且容易出錯。對這種情況, Turbo C2.0提供了一個開關語句。開關語句格式為:switch(變數){ case 常量1: 語句1或空; case 常量2: 語句2或空; . . . case 常量n; 語句n或空; default: 語句n+1或空;}執行switch開關語句時, 將變數逐個與case後的常量進行比較, 若與其中一個相等, 則執行該常量下的語句, 若不與任何一個常量相等, 則執行default 後面的語句。注意:1. switch中變數可以是數值, 也可以是字元。2. 可以省略一些case和default。3. 每個case或default後的語句可以是語句體, 但不需要使用"{"和"}"括起來。下例的switch中變數為整數型。main(){int test;for(test=0; test<=10; test++){switch(test) /*變數為整型數的開關語句*/{case 1:printf("%d", test);break; /*退出開關語句*/case 2:printf("%d", test);break;case 3:printf("%d", test);break;default:puts("Error");break;}}}下例的switch中變數為字元型。#include<stdio.h>main(){char c;while(c!=27) /*循環直到按Esc鍵結束*/{c=getch(); /*從鍵盤不回顯接收一個字元*/switch(c){case A: /*接收的字元為A*/putchar(c);break; /*退出開關語句*/case B:putchar(c);break;default: /*接收的字元非A和B*/puts("Error");break;}}}03for循環for循環是開界的。它的一般形式為:for(<初始化>; <條件表過式>; <增量>) 語句;(1)初始化總是一個賦值語句, 它用來給循環控制變數賦初值;(2) 條件表達式是一個關系表達式, 它決定什麼時候退出循環;(3) 增量定義循環控制變數每循環一次後按什麼方式變化。這三個部分之間用";"分開。例如:for(i=1; i<=10; i++) 語句;上例中先給i賦初值1, 判斷i是否小於等於10, 若是則執行語句, 之後值增加1。再重新判斷, 直到條件為假, 即i>10時, 結束循環。注意:1. for循環中語句可以為語句體, 但要用"{"和"}"將參加循環的語句括起來。2. for循環中的"初始化"、"條件表達式"和"增量"都是選擇項, 即可以預設, 但";"不能預設。省略了初始化, 表示不對循環控制變數賦初值。 省略了條件表達式, 則不做其它處理時便成為死循環。省略了增量, 則不對循環控制變數進行操作, 這時可在語句體中加入修改循環控制變數的語句。3. for循環可以有多層嵌套。例16:main(){ int i, j, k; printf("i j k"); for (i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++) printf(%d %d %d", i, j, k);}04while循環與do-while 循環while循環的一般形式為:while(條件) 語句;while循環表示當條件為真時, 便執行語句。直到條件為假才結束循環。並繼續執行循環程序外的後續語句.例17:#include<stdio.h>main(){char c;c=; /*初始化c*/while(c!=X0D) /*回車結束循環*/c=getche(); /*帶回顯的從鍵盤接收字元*/}上例中, while循環是以檢查c是否為回車符開始, 因其事先被初始化為空,所以條件為真, 進入循環等待鍵盤輸入字元; 一旦輸入回車, 則c=X0D, 條件為假, 循環便告結束。與for循環一樣, while循環總是在循環的頭部檢驗條件, 這就意味著循環可能什麼也不執行就退出。注意:1. 在while循環體內也允許空語句。例如:while((c=getche())!=X0D);這個循環直到鍵入回車為止。2. 可以有多層循環嵌套。3. 語句可以是語句體, 此時必須用"{"和"}"括起來。例18:#include<stdio.h>main(){char c, fname[13];FILE *fp; /*定義文件指針*/printf("File name:"); /*提示輸入文件名*/scanf("%s", fname); /*等待輸入文件名*/fp=fopen(fname, "r"); /*打開文件只讀*/while((c=fgetc(fp)!=EOF) /*讀取一個字元並判斷是否到文件結束*/putchar(c); /*文件未結束時顯示該字元*/}05do-while 循環do-while 循環的一般格式為:do語句;while(條件);這個循環與while循環的不同在於: 它先執行循環中的語句, 然後再判斷條件是否為真, 如果為真則繼續循環; 如果為假, 則終止循環。因此, do-while循環至少要執行一次循環語句。同樣當有許多語句參加循環時, 要用"{"和"}"把它們括起來。06continue 語句continue語句的作用是跳過循環本中剩餘的語句而強行執行下一次循環。continue語句只用在for、while、do-while等循環體中, 常與if條件語句一起使用, 用來加速循環。 main(){ char c; while(c!=0X0D) /*不是回車符則循環*/ { c=getch(); if(c==0X1B) continue; /*若按Esc鍵不輸出便進行下次循環*/ printf("%c", c); }}07break語句 break語句通常用在循環語句和開關語句中。當break用於開關語句switch中時, 可使程序跳出switch而執行switch以後的語句; 如果沒有break語句, 則將成為一個死循環而無法退出。當break語句用於do-while、for、while循環語句中時, 可使程序終止循環而執行循環後面的語句, 通常break語句總是與if語句聯在一起。 即滿足條件時便跳出循環。main(){ int i=0; char c; while(1) /*設置循環*/ { c=; /*變數賦初值*/ while(c!=13&&c!=27) /*鍵盤接收字元直到按回車或Esc鍵*/ { c=getch(); printf("%c", c); } if(c==27) break; /*判斷若按Esc鍵則退出循環*/ i++; printf("The No. is %d", i);}printf("The end");}
    望採納,謝謝

    4. C語言里%zd是什麼意思

    格式符z和整數轉換說明符一起使用,表示對應數字是一個size_t值。屬於C99。

    %ld 表示long型。

    5. 當前C語言標准為ISO/IEC 9899:1999是嗎

    C11

    2011年12月8日,ISO正式發布了新的C語言的新標准C11,之前被稱為C1X,官方名稱為ISO/IEC 9899:2011。

    新的標准提高了對C++的兼容性,並增加了一些新的特性。這些新特性包括:

    對齊處理(Alignment)的標准化(包括_Alignas標志符,alignof運算符, aligned_alloc函數以及<stdalign.h>頭文件。
    _Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。
    _Generic 關鍵字。
    多線程(Multithreading)支持,包括:_Thread_local存儲類型標識符,<threads.h>頭文件,裡麵包含了線程的創建和管理函數。
    增強的Unicode的支持。基於C Unicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字元串轉換函數的頭文件<uchar.h>.
    刪除了 gets() 函數,使用一個新的更安全的函數gets_s()替代。
    增加了邊界檢查函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。
    增加了更多浮點處理宏。
    匿名結構體/聯合體支持。這個在gcc早已存在,C11將其引入標准。
    靜態斷言(Static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。
    新的 fopen() 模式,(「…x」)。類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。
    新增 quick_exit() 函數作為第三種終止程序的方式。當 exit()失敗時可以做最少的清理工作。
    _Atomic類型修飾符和<stdatomic.h>頭文件。

    目前大多數的編譯系統並沒有完全的實現C11標准,主要還是以以前的C99標准為主流
    你只要在網路中尋找關鍵字C11,就可以詳細查到該標准

    6. 簡述c語言的發展史

    C語言的祖先是BCPL語言。
    1967年,劍橋大學的 Martin Richards 對CPL語言進行了簡化,於是產生了BCPL(Basic Combined Programming Language)語言。
    1970年,美國貝爾實驗室的 Ken Thompson。以BCPL語言為基礎,設計出很簡單且很接近硬體的B語言(取BCPL的首字母)。並且他用B語言寫了第一個UNIX操作系統。
    在1972年,美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
    為了使UNIX操作系統推廣,1977年Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。
    1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。同時由B.W.Kernighan和D.M.Ritchie合著了著名的《The C Programming Language》一書。通常簡稱為《K&R》,也有人稱之為《K&R》標准。但是,在《K&R》中並沒有定義一個完整的標准C語言,後來由美國國家標准化協會(American National Standards Institute)在此基礎上制定了一個C語言標准,於一九八三年發表。通常稱之為ANSI C。
    K&R第一版在很多語言細節上也不夠精確,對於pcc這個「參照編譯器」來說,它日益顯得不切實際;K&R甚至沒有很好表達它所要描述的語言,把後續擴展扔到了一邊。最後,C在早期項目中的使用受商業和政府合同支配,這意味著一個認可的正式標準是必需的。因此(在M. D. McIlroy的催促下),ANSI於1983年夏天,在CBEMA的領導下建立了X3J11委員會,目的是產生一個C標准。X3J11在1989年末提出了一個他們的報告[ANSI 89],後來這個標准被ISO接受為ISO/IEC 9899-1990。
    1990年,國際標准化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標准(ISO9899-1990)。1994年,ISO修訂了C語言的標准。
    1995年,ISO對C90做了一些修訂,即「1995基準增補1(ISO/IEC/9899/AMD1:1995)」。1999年,ISO又對C語言標准進行修訂,在基本保留原來C語言特徵的基礎上,針對應該的需要,增加了一些功能,尤其是對C++中的一些功能,命名為ISO/IEC9899:1999。
    2001年和2004年先後進行了兩次技術修正。
    目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則又略有差別。
    2011年12月8日,ISO正式公布C語言新的國際標准草案:ISO/IEC 9899:2011,即C11。
    新的標准修提高了對C++的兼容性,並將新的特性增加到C語言中。新功能包括支持多線程, 基於ISO/IEC TR 19769:2004規范下支持Unicode,提供更多用於查詢浮點數類型特性的宏定義和靜態聲明功能。這些新特性包括:
    ● 對齊處理(Alignment)的標准化(包括_Alignas標志符,alignof運算符,aligned_alloc函數以及<stdalign.h>頭文件。
    ● _Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。
    ● _Generic 關鍵字。
    ● 多線程(Multithreading)支持,包括:_Thread_local存儲類型標識符,<threads.h>;頭文件,裡麵包含了線程的創建和管理函數。
    ● 增強的Unicode的支持。基於C Unicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字元串轉換函數的頭文件<uchar.h>.
    ● 刪除了 gets() 函數,使用一個新的更安全的函數gets_s()替代。
    ● 增加了邊界檢查函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。
    ● 增加了更多浮點處理宏。
    ● 匿名結構體/聯合體支持。這個在gcc早已存在,C11將其引入標准。
    ● 靜態斷言(Static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。
    ● 新的 fopen() 模式,(「…x」)。類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。
    ● 新增 quick_exit() 函數作為第三種終止程序的方式。當 exit()失敗時可以做最少的清理工作。
    ● _Atomic類型修飾符和<stdatomic.h>;頭文件。