c語言-概述

来源:http://www.cnblogs.com/XenoStudio/archive/2016/06/07/5566615.html
-Advertisement-
Play Games

起源 1950晶體管電腦年代,歐美電腦學家合力所組成的聯席大會共同開發 ALGOL(ALGOrithmic Language),也稱為A語言。 1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。 1967年,英國劍橋大學的 ...


起源

  1950晶體管電腦年代,歐美電腦學家合力所組成的聯席大會共同開發 ALGOL(ALGOrithmic Language),也稱為A語言。

  1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。

  1967年,英國劍橋大學的 Dennis MacAlistair Ritchie(丹尼斯·麥卡利斯泰爾·里奇) 對 CPL語言做了簡化,推出了 BCPL (Base Combined Programming Langurage)語言。

  1970年,美國貝爾實驗室的 Brian Wilson Kernighan(布萊恩·威爾森·柯林漢) 以 BCPL 語言為基礎,又作了進一步的簡化,設計出了很簡單的而且很接近硬體的 B 語言(取BCPL的第一個字母),並用B語言寫出了第一個 UNIX 操作系統。

  1972年~1973年間,貝爾實驗室的 Dennis M.Ritchie 在 B 語言的基礎上設計出了 C 語言(取BCPL的第二個字母)。

  1977年,Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程式》。

  1978年,Brian W.Kernighian和 Dennis M.Ritchie共同出版了名著《The C Programming Language》,被C語言開發者們稱為“K&R C”。

  1989年,ANSI 發佈了第一個完整的C語言標準——ANSI X3.159—1989,簡稱“C89”,不過人們也習慣稱其為“ANSI C”。

  1990年,ANSI C 被國際標準組織ISO採納,命名為ISO/IEC9899: 1990,簡稱為“C90”。

  1999年,在做了一些必要的修正和完善後,ISO發佈了新的C語言標準,命名為ISO/IEC 9899:1999,簡稱“C99”。

  2011年12月8日,ISO又正式發佈了新的標準,稱為ISO/IEC9899: 2011,簡稱為“C11”。

 

優點

  1、簡潔緊湊、靈活方便
  2、運算符豐富
  3、數據類型豐富
  4、表達方式靈活實用
  5、允許直接訪問物理地址,對硬體進行操作
  6、生成目標代碼質量高,程式執行效率高
  7、可移植性好
  8、表達力強

缺點

  1、C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。
  2、C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程式的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程式設計更熟練一些。

 

C語言關鍵字

  關鍵字就是已被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
    
    
    C99標準新增5個關鍵字:
    
    inline        內聯函數,在C++中用的多, 它是巨集定義的一種優化實現方式
    restrict    它只可以用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式
    _Bool        unsigned int 型,在C99中被定義為布爾型,只可容納0、1兩個值
    _Complex    複數類類型
    _Imaginary    純虛函數類型
    
    
    C11標準新增1個關鍵字:
    
    _Genneric 泛型

根據關鍵字的作用,可以將關鍵字分為數據類型關鍵字和流程式控制制關鍵字兩大類:

  一、數據類型關鍵字
 
  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特性”,指定變數的值有可能會被系統或其他進程/線程改變,強制編譯器每次從記憶體中取得該變數的值

 
  二、流程式控制制關鍵字
 
  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為迴圈條件。在整個for迴圈過程中,表達式1只計算一次,表達式2和表達式3則可能計算多次,也可能一次也不計算。迴圈體可能多次執行,也可能一次都不執行。 
  do :do迴圈結構,do 1 while(2); 的執行順序是1->2->1..迴圈,2為迴圈條件 
  while :while迴圈結構,while(1) 2; 的執行順序是1->2->1..迴圈,1為迴圈條件
 
  以上迴圈語句,當迴圈條件表達式為真則繼續迴圈,為假則跳出迴圈。

C語言34種運算符

  按優先順序從高到低排序,空行優先順序下降一級別。

()        圓括弧
[]        下標
->        指針型結構成員
.        結構成員
    /* 單目、右結合運算 */
!        邏輯非
~        位非
++        自增
--        自減
-        取負
(類型)    類型轉換
*        取內容
&        取地址
sizeof    求數據類型或者表達式的長度
    /* 單目、右結合運算 */
    
    /* * 雙目、左結合運算 * */
*/%        求餘
+-<<        左移
>>        右移
<        小於
<=        小於等於
>        大於
>=        大於等於
==        等於
!=        不等於
&        位與
^        位異或
|        位或
&&||/* * 雙目、左結合運算 * */
?:        條件運算    /* * * 三目、右結合運算 * * */

=        賦值運算(+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=)
,        逗號運算

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • private、public、protected 這三者大家都不會感到陌生。 訪問許可權的修飾詞,給類中的每一個成員定義一個使用範圍 ,但是在使用的時候,可能有人不會太在意他們的區分,在某些情況下,不進行區分也許都是可行的,但是卻不一定是最好。可能,一時也不會暴露出什麼問題,但是,當項目變得龐大而複雜 ...
  • php:cmd /k /path/to/php.exe "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT python:cmd /k D: & cd "$(CURRENT_DIRECTORY)" & python "$(FULL_CURRENT_PATH)" ...
  • 上次我們學習了面向對象,“類”的創建及公有屬性的定義 公有屬性定義的單詞是:public 公有屬性表示內部所定義的成員對程式所有的部分可見,這裡的成員包括:數據成員、成員函數以及類型 也就是說,無論是程式的什麼部分,都可以直接訪問、修改這些類的對象的成員 這就意味誰都可以修改類對象里關鍵的數據信息, ...
  • 基於上篇文章"基於Tomcat + JNDI + ActiveMQ實現JMS的點對點消息傳送"很容易就可以編寫一個發佈/訂閱消息傳送例子,相關環境準備與該篇文章基本類似,主要的區別如下。 在Tomcat中配置JNDI 配置連接工廠和話題 在Web工廠中編寫代碼 新建一個發佈者Servlet 新建一個 ...
  • 本文介紹了用 SimpleDateFormat、Joda-Time、Apache-DateUtils 三種方式解析ISO8601日期字元串的異同 ...
  • 最近在看js,看到closure(閉包)這一塊兒的時候就想到了 java的匿名內部類 兩者都有涉及到變數/參數的引用問題。 先說java的匿名內部類,他的定義我就不多做說明瞭,可以參考地址 http://docs.oracle.com/javase/tutorial/java/javaOO/anon ...
  • c++重載運算符 by ysmor 重新解釋運算符的含義,叫做運算符重載 c++程式設計P277 不多說了,給代碼 輸入9 100 2 運行結果 THE END... 歡迎大家跟帖,並繼續關註我 註意:本博客為原創作品,csdn上的那篇也是我發的 鏈接http://blog.csdn.net/yig ...
  • VC++代碼是最接近彙編指令的高級語言,為了更加準確和深刻理解VC++編碼中所涉及的很多技術概念和編譯器參數的含義,從彙編指令層面進行剖析和解讀,有助於開發者更加準確、直觀、深刻理解高級語言中很多概念和技術的真正含義,對程式優化和編碼都有非常實用的重要價值。由於內容很多,我會分解為很多篇章進行解讀實 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...