C语言的历史
本文记述了C语言自20世纪70年代至今的历史及发展。 早期發展 C語言最早由丹尼斯·里奇(Dennis Ritchie)為了在PDP-11電腦上運行的Unix系統所設計出來的程式語言,第一次發展在1969年到1973年之間。 C源于BCPL语言,后者由馬丁·理察德(Martin Richards)于1967年左右设计实现。BCPL是一门"无类型"的编程语言:它仅能操作一种数据类型,即机器字(machine word)。1970年,肯·汤…
共 38 篇文章
本文记述了C语言自20世纪70年代至今的历史及发展。 早期發展 C語言最早由丹尼斯·里奇(Dennis Ritchie)為了在PDP-11電腦上運行的Unix系統所設計出來的程式語言,第一次發展在1969年到1973年之間。 C源于BCPL语言,后者由馬丁·理察德(Martin Richards)于1967年左右设计实现。BCPL是一门"无类型"的编程语言:它仅能操作一种数据类型,即机器字(machine word)。1970年,肯·汤…
嵌入式C语言是由为解决C语言与不同嵌入式应用之间存在的共同问题而提出的一种C语言标准化扩展。 发展历史 在早期的嵌入式应用中,工程师需要对C语言进行扩展以使系统能够支持诸如定点数,多个不同的存储器以及I/O等功能,但对于不同系统的扩展并不能通用,非标准化地扩展将会降低软件的可移植性。因此在2008年,C语言标准委员会对C语言进行了标准化扩展,以解决上述问题。扩展后的C语言在原标准C语言的基础上新增了定点运算,地址空间命名,I/O硬件寻址…
C字串函式庫是C語言裡負責各種字符串處理操作功能的標準函式庫,例如:複製,連接,標記化和搜索等。 包含的函數 ; 轉換函數 [http://www.cplusplus.com/reference/clibrary/cstdlib/mbtowc mbtowc] - converts the first multibyte character in a string to the matching wide character [http:…
CERT程式撰寫標準(CERT Coding Standards)是由(SEI)的CERT協調中心發展的軟體,著重在提昇軟體系統的安全性、可靠性以及資料安全性,目前已針對C語言、C++、Java、Android及Perl的標準文件。 CERT C安全程式撰寫標準中的指引,參考了許多不同的標準,例如通用缺陷列表(CWE)以及MISRA C。 相關條目 公共漏洞和暴露(CVE) MISRA C 參考資料 外部連結 [https://www.…
sizeof是编程语言C语言和C++中的操作符。它能表示資料類型或對象的存储大小(內存字節數),存储大小以一個char大小的单位來衡量。因此sizeof (char)等於1 。被計算的数据类型不仅可以是原始型別,例如整数和浮点类型,还可以是指针类型和复合数据类型(联合体、结构体和 C++类)。 语法 sizeof返回的是size_t数据类型。对于变量作为运算数,可以不加括号;对于数据类型作为运算数,必须加括号。例如: char c; p…
The Power of 10是NASA喷气推进实验室(JPL)的Gerard J. Holzmann在2006年所提出,有關軟體可靠性的原則。此原則的目的是要消除C語言中不容易評審,或不容易進行靜態分析的程式寫法。此原則是補充MISRA C的內容,後來已整合JPL的裡。 原則 這十條原則是。 相關條目 生命攸關系統 软件质量 延伸閱讀 參考資料 外部連結 [https://opensourcesatellite.org/how-do-…
在C和C++程式語言中,#pragma once是一個非標準但是被廣泛支援的前置處理符號,會讓所在的檔案在一個單獨的編譯中只被包含一次。以此方式,#pragma once提供類似include防範的目的,但是擁有較少的程式碼且能避免名稱的碰撞。 示例 請參考include防範裡其中一種狀況的範例或其他的使用方法。如下: ;grandparent.h #pragma once struct foo { int member; }; ;pa…
顺序点,也称作序列点,是计算机程序中一些执行点,在该点处之前的求值的所有的副作用已经发生,在它之后的求值的所有副作用仍未开始。在C与C++程序设计语言中,表达式的值依赖于它的子表达式的求值顺序。增加更多的顺序点限制了可能的求值顺序,能保证有一个一致结果。 C++11中,顺序点概念已经被sequenced before这种方法取代:直接指出一个求值是在另一个求值之前,或者两个求值是无顺序的。无顺序的求值可以重叠进行。 歧义例子 考虑两个函…
所有的C语言运算符都被C++语言支持。C语言不支持运算符重载。 在不重载时,运算符&&、||、,(逗号运算符),在第一个操作数求值之后有一个顺序点。 大部分C与C++运算符也可用于其它程序设计语言如C#、Java、Perl、PHP等,具有相同的优先级、结合性与语义。 運算子優先級 以下是C++程式語言中的所有運算子的優先級和結合性列表。 列表 在本表中,a、b和c代表有效值(來自變數或返回值的逐字常數或數值)、物件名稱,或適當的左值。 …
C语言语法由国际标准化组织所制定。 复合语句 C语言中的复合语句(或称语句块)的格式为: { 語句; 語句; / ... / } 。 指针 如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。C语言的一个函数由返回值、函数名、参数列表和函数体组成。函数体的语法和其它的复合的语句部分是一样的。C函数可以是库中自带的函数,也可以是用户定义的函数,且不允许函数嵌套定义。 在一个C语言编写的程序开始运行时,系统首先调用 main函数(主…
在Unix和類Unix系統中,如同某些程式語言介面一樣,標準串流是當一個電腦程式執行時,在它和它的環境間(典型為終端),事先連接的輸入和輸出頻道。這三個I/O連結稱作“標準輸入”、“標準輸出”和“標準錯誤輸出”。 背景 在Unix之前的作業系統,程式必須明確指出連結到合適的輸入和輸出資料。對這當中的許多系統而言,這牽涉一些錯綜複雜而又與特定作業系統相關的事,是一件嚇人的程式設計挑戰。如控制環境設定、存取一個檔案表格、決定區域資料集、和決…
{{ Infobox_Software | name = Anjuta | logo = Anjuta.svg | logo size = 50px | screenshot = Anjuta-2.0.0-2.png | screenshot size = 250px | caption = 正在使用類別繼承圖與虛擬終端機的Anjuta 2 | developer = Anjuta開發團隊 | latest_release_versio…
在C和C++程式語言中,#include防範,有時被稱作巨集防範,用於處理#include 指令時,可避免重複引入的問題。在標頭檔加入#include防範是一種讓檔案等冪的方法。 重複引入 以下的C語言程式展示了缺少#include防範時會出現的問題: ;檔案「grandfather.h」 struct foo { int member; }; ;檔案「father.h」 #include "grandfather.h" ;檔案「chi…
cω是一種尚在研究中的程序设计语言,專門應用於平行運算的編程語言。這種語言由微軟研究院開發。 根據微軟研究所,Cω是一種用作擴充C#的試驗性的語言,內裏包括新建的關聯性和準結構性的資料存取,與及異步並發計算。Cω主要在兩大範圍上擴充C#: 一種針對「非同步式寬域同作」(asynchronous wide-area concurrency)的控制流程延伸(如 Polyphonic C#)。 一種針對 XML 和表格處理(table man…
conio.h是一個C標頭檔,用於MS-DOS C編譯器裡。此標頭檔宣告了數個有用的函式,提供程式設計者主控台的輸出入操作介面。大部份MS-DOS、Windows 3.x、Phar Lap、DOSX、OS/2或Win32的C編譯器都預設此標頭檔,並提供相關的函式。 用於UNIX及Linux的編譯器並不支援conio.h,因為它不屬於C標準函式庫(C Standard library)或POSIX的一部分。 函式 conio.h所提供的函…
包含指令(include)是许多编程语言中的一个指令,它的作用是使其他文件的内容插入到正在編程的文件中。包含指令可以促进代码的封装和複用。有些編程語言中並沒有include,而是用copy或import來替代。
在C语言中,结构体(struct)指的是一种数据结构,是C语言中复合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。 定义与声明 结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必…
屏看原理是c语言定义复杂数据类型时的一种规范。 例子 void (int p1,int p2); #define mysub(x) x^3/x; 在第一句中,参数是p1,而不是int,即不是*p1,我们优先看到p1,p2这样的变量,即参数是变量 在第二句中,define的是mysub(x)这个整体,而不是x,我们优先看到mysub(x),即define语句的整个前半部分