C语言
C语言的特色之一是：语言不负责内存边界检查，这是因为在运行时进行内存边界检查会造成性能问题，与UNIX哲学不符。此特性容易导致缓冲区溢出问题。然而，部分编译器（如英特尔编译器）会出于安全性的考量，提供方法以进行运行时内存边界检查。
编程语言
编程语言的描述一般可以分為及語義。語法是說明編程語言中，哪些符號或文字的組合方式是正確的，語義則是對於編程的解釋。有些語言是用規格文件定義，例如C語言的規格文件也是ISO標準中一部份，2011年後的版本為ISO/IEC 9899:2017，而其他語言（例如Ada或者Perl）有一份文件，视为。
Objective-C
Objective-C是C語言的嚴格超集－－任何C語言程式不經修改就可以直接通過Objective-C編譯器，在Objective-C中使用C語言代碼也是完全合法的。Objective-C被描述为"蓋在C語言上的薄薄一層"，因為Objective-C的原意就是在C語言主體上加入面向对象的特性。Objective-C的面向对象語法源於Smalltalk訊息傳遞風格。所有其他非面向对象的語法，包括變數型別，預處理器（preprocessing），流程控制，函數声明與调用皆與C語言完全一致。但有些C语言语法合法代码在objective-c中表达的意思不一定相同，比如某些布尔表达式，在C语言中返回值为true，但在Objective-C若与true直接相比较，函数将会出错，因为在Objective-C中true的值只表示为1.
D語言
D的設計來自實際的C++用法的經驗教訓，而不是從理論的角度。D沿用了很多C/C++觀念，同時摒弃了一些概念，因此D並不完全相容C/C++代码。D实现了C++的功能，实现了契約式設計（design by contract）、單元測試、真正的模組性、自動化記憶體管理（垃圾回收）、頭等数组（first class array）、关联数组、动态数组、数组切片、嵌套函数（巢狀函式）、內部類別、閉包的限制形式、匿名函式、編譯時期函式執行、惰性計算以及革新的模板語法。D保有C++的性能以進行低階程式設計，並加入完整的內聯組譯器支援。C++的多重繼承改以Java 單繼承與介面混合的風格取代。D的-{zh-tw:宣告;zh-cn:声明;}-、語句和表達式幾乎和C++一樣。
机器语言
机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同种类的计算机其机器语言是不相容的，按某种计算机的机器指令编制的程式不能在另一种计算机上执行。
C语言
二十世纪八十年代，為了避免各開發廠商用的C語言的語法產生差異，由美國國家標準局為C語言訂定了一套完整的國際標準語法，稱為ANSI C，作為C語言的標準。二十世纪八十年代至今的有关程式開發工具，一般都支持符合ANSI C的語法。20世纪70年代，肯·汤姆森为了使其设计的Unix系统更加高效，使用B语言的变种（即C语言）重写了Unix。在1978年，丹尼斯·里奇和布萊恩·柯林漢合作出版了《C程序设计语言》第一版，事实上即为K&R C标准。在这之后，制定标准的工作转移到ISO和ANSI。目前最新的C语言标准是C18。
保留字
一个语言具有的保留字数量与其功能“强大”程度没有必然联系。COBOL在20世纪50年代被设计成一种商业语言，它是一种自存档（）、使用类似英语结构的元素（例如动词、子句、语句等）。而相反地，C语言被设计成一种在句法上较为简练的编程语言。例如，比较下列来自C语言和COBOL的两段计算单周收入的等价语句块： // 使用C语言计算：
前向声明
在Pascal与其它Wirth型的编程语言中, 一般规则是所有实体必须在使用前被声明. C语言适用同样的规则, 但存在未声明的函数与不完备的数据类型这样的特例. 因此，C语言允许(虽然不够明智)实现一对互递归函数: int first(int x) {
Visual Basic .NET
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click End Sub与C家族语言相比，VB.NET则较多保留了VB的特征，比如：
Visual C++名字修饰
目前，C语言常用的调用协议有三种：cdecl, stdcall与fastcall，其它众多调用协议如__pascal, __fortran, __syscall, __far等基本上算是过时了(obsolote)，因此无需考虑。cdecl的函数被改名为_name；stdcall的函数被改名为_name@X；fastcall的函数被改名为@name@X。其中X是函数形参所占用的字节长度(包括那些用寄存器传递的参数, 如fastcall协议). 例如： int __cdecl foo(int i); // mangled name is _foo; int __stdcall bar(int j); // mangled name is _bar@4  int __fastcall qux(int i) ; // mangled name is @qux@4  注意在64位Windows平台上，由于ABI有正式标准可依，只存在一种子程序调用协议，所以该平台上的C语言的函数不在名字前加上下划线(leading underscore). 这会导致一些老的程序(legacy program), 例如使用'alias'去链接C语言的函数的Fortran程序不能正常工作。
别名 (计算)
For example, most implementations of the C programming language do not perform array bounds checking. One can then exploit the implementation of the programming language by the compiler and the computer architecture's assembly language conventions, to achieve aliasing effects by writing outside of the array (a type of buffer overflow). This invokes undefined behaviour according to the C language specification; however many implementations of C will show the aliasing effects described here.
C++
C99去除了一些不兼容之处，也新增了一些C++的特性，如codice_2注释，以及在代码中混合使用。不过C99也纳入几个和C++冲突的新特性（如：可变长数组、原生复数类型和复合逐字常数），而C++11已经加入了兼容C99预处理器的特性。
Objective-C
其它语言也尝试了通过不同方法增加这一语言特性。在这方面走的更远，不仅允许增加方法，更允许增加成员变量。也有其它语言使用[[基于原型编程|面向声明]]的解决方案，其中最值得注意的是[[Self语言]]。
SAC编程语言
为了能够编译出高效的可执行代码，某些对数值计算不重要的函数式语言的特征（到目前为止）还不被SAC支持，比如高阶函数，多态，以及惰性求值。而像Haskell、Clean、Miranda或者ML却拥有这些特征。
面向对象程序设计
面向对象的特性也被加入了当时较为流行的语言：Ada、BASIC、Lisp、Fortran、Pascal以及种种。由于这些语言最初并没有面向对象的设计，故而这种糅合常常会导致兼容性和维护性的问题。与之相反的是，“纯正的”面向对象语言却缺乏一些程序员们赖以生存的特性。在这一大环境下，开发新的语言成为了当务之急。作为先行者，Eiffel成功地解决了这些问题，并成为了当时较受欢迎的语言。
属性 (编程)
属性（Property），在一些面向对象编程语言中，是类的特殊成员，功能上居于字段（或数据成员）与方法之间。可读可写属性的语法类似于字段，但属性的读写操作通常被编译为getter与setter方法调用。属性使用类似于字段的读写语法，比普通的方法调用的语法形式更易于读写操作；但属性读写编译为内部的方法调用，则可以支持数据确认、主动修改或实现只读字段等功能。 支持属性的编程语言有：ActionScript 3、C#、D、Delphi/Free Pascal、eC、F#、Kotlin、JavaScript、Objective-C 2.0、Python、Scala、Swift、Lua、Visual Basic。
Cg語言
Cg语言主要参照ANSI C建模，但也从C++和Java以及早期的绘制语言如RenderMan and the Stanford shading language中吸取了一些思想。这些使得很容易写程序然后由编译器进行优化，提高了可读性。而且Cg的设计考虑了GPU的体系结构，如可编程多处理器单元（顶点处理器，像素处理器，外加不可编程单元）。这些部分和应用都是通过数据流连接起来。Cg语言允许分别为顶点和像素写程序。Cg API引入了profiles的概念以处理顶点和像素编程所缺乏的通用性。一个Cg profile就定义了一套整个Cg语言的子集以适应不同的硬件平台和API。Cg程序可以根据运行时的需要或者事先编译成GPU汇编代码。这样可以很容易地将一个Cg像素程序和手写的顶点程序结合起来，或者甚至采用不可编程的OpenGL或者DirectX顶点流水线，反之亦然。
C语言的历史
1978年，丹尼斯·里奇和布萊恩·柯林漢合作出版了《C程序设计语言》的第一版。書中介紹的C語言標準也被C語言程式設計師稱作“K&R C”（柯里C），第二版的書中也包含了一些ANSI C的標準。
内省 (计算机科学)
不应该将内省和反射混淆。相对于内省，反射更进一步，是指计算机程序在运行时（）可以访问、检测和修改它本身状态或行为的一种能力。一些编程语言比如Java具有反射特性，而C++不具有反射特性只具有内省特性。
Cg語言
Cg语言（C for Graphics）是为GPU编程设计的高級著色器語言，由NVIDIA公司开发。Cg极力保留C语言的大部分语义，并让开发者从硬件细节中解脱出来，Cg同时也有一个高级语言的其他好处，如代码的易重用性，可读性得到提高，编译器代码优化。
面向对象程序设计
支持部分或绝大部分面向对象特性的语言即可称为基于对象的或面向对象的语言。Simula (1967)被視為第一個具有物件導向]特性的語言。早期，完全面向对象的语言主要包括Smalltalk等语言，目前较为流行的语言中有Java、C#、Eiffel等。随着软件工业的发展，比较早的程序導向的语言在近些年的发展中也纷纷吸收了许多物件導向的概念，比如C→C++，C→Objective-C，BASIC→Visual Basic→Visual Basic .NET，Pascal→Object Pascal，Ada→Ada95。「純粹」的物件導向語言, 因為所有的東西都是由物件所組成，例如：Eiffel, Emerald, JADE, Obix, Ruby, Scala, Smalltalk, Self.
Objective-C
苹果公司在 WWDC2012 大会上介绍了大量 Objective-C 的新特性，能够讓程序员更加高效地编写代码，这些新特性在 Xcode4.4 版本中已经可以使用。Objective-C是非常「實際」的語言。它用一個很小的、用C寫成的[[运行时系统|运行库]]，使得應用程式的大小增加很少，与此相比，大部分OO系统需要极大的运行时虚拟机来执行。Objective-C寫成的程式通常不會比其原始碼和函式庫（通常无需包含在軟體發行版本中）大太多，不会像Smalltalk系統，即使只是打开一个窗口也需要大量的容量。由于Objective-C的动态类型特征，Objective-C不能对方法进行内联（inline）一类的优化，使得Objective-C的应用程序一般比类似的C或C++程序更大。
第二代程式語言
这些语言可能有一些优势，例如它们的执行速度更快；但是，它们也有缺点。在编写第二代编程语言的程序时，程序员需要：当今，大多数程序都是用第三代编程语言或第四代编程语言编写的。汇编语言在运行速度方面的优势也不再明显；与汇编相比，编写完善的C语言程序通常能运行得一样快甚至更快。 第二代编程语言占据了计算机发展史中的重要地位。有很长一段时间，给许多机器（如红白机或康懋达64）编程的唯一选择就是第二代编程语言。 第二代编程语言在从“程序员向机器妥协”到“机器向程序员妥协”的道路上迈出了第一步，编程语言世代的发展遵循了这条道路。
Joy (编程语言)
Joy是不寻常的（除了函数级编程语言和某些难懂语言如之外），在于它缺乏lambda算子，因而缺乏形式参数。要通过常见例子来说明，平方函数在指令式编程语言（C语言）中定义如下： int square(int x)
无符号数
C语言及大部分C的派生语言为其所有有符号数类型及char类型提供了对应的无符号类型。在这些语言中，若存在显式的unsigned标识符，则将此数标识为无符号，否则为有符号（char类型除外），对应地存在signed标识符用于标识有符号数。为数值添加U后缀也可将此数值标识为无符号数。例如，在32位数中，0xFFFFFFFF表示-1，但0xFFFFFFFFU表示4294967295。
C++
1983年，改命名為C++（codice_1是C语言中的增值操作符）。加入了新的特性，其中包括虛擬函式、函式名和運算子多載、參考、常數、使用者可控制的自由空間儲存區控制、改良的型別檢查，以及新的雙斜線（codice_2）單行註解風格。
C♯
泛型，或参数化类型，是被C#支持的.NET 2.0特性。不同于C++模版，.NET参数化类型是在运行时被实例化，而不是编译时，因此它可以跨语言，而C++模版却不行。它支持的一些特性并不被C++模版直接支持，比如约束泛型参数实现一个接口。另一方面，C# 不支持无类型的泛型参数。不像Java中的泛型，在CLI虚拟机中，.NET generics使用具化生成泛型参数，它允许优化和保存类型信息。
基于原型编程
在最后一点上，效率，类的声明简化了编译器的组织，允许开发高效的方法以及实例变量查找。对Self语言来说，大多开发时间都消耗在开发、编译以及解释技术，用以改进基于原型的系统相对于基于类的系统的性能。举例来说Lisaac产生的代码速度几乎跟C一样快。测试是由MPEG-2编码器的Lisaac版本得出的，它由一个C语言版本复制而来。测试显示，Lisaac版本比C版本慢1.9%，但代码行数少了37%。然而C语言并非物件導向语言，而是一个过程式语言。Lisaac跟C++版本相比可能更说明问题。
C Shell
C shell（csh）是Unix shell的一种，由比尔·乔伊在BSD系统上开发。C shell脱胎于Unix第六版的codice_1，也是Bourne shell的前身。这种shell的语法类似于C语言，与Bourne shell相比，C shell有不少特别的功能，比如codice_2（别名）、command history（命令的历史）。目前C shell已不再被广泛使用，后继者包括Tenex C shell（tcsh）、Korn shell（ksh）、GNU Bourne-Again shell（bash）。
解析表达文法
许多CFG固有的存在二义性，即使它们原本要描述的东西并不具有二义性。C, C++, Java里面著名的就是一个例子。这个问题通常都是应用文法之外的一个规则解决。而在PEG里面，因为使用了优先权，所以根本不存在这种问题。
BSTR
对于BSTR，NULL与""有相同的语义（Visual Basic引入的语义）。BSTR的长度不包含结尾的\0字节。BSTR必须用SysAlloc*操作系统API申请与释放。 C程序語言本身原並不支援字串資料結構。字符串通常以一個字符數組（或稱陣列）或一個指向字符資料的指標來表達。由於C語言的數組不包含其長度的資訊，故亦無法表示所載之字符串之長度。C語言社群對此通用之解決方案為於字符串末端增添一數值0的字符。C語言的標準程序庫中的字符串處理功能亦以此為基礎。C-Style 字符串特點為不直接包含長度資訊。要取得字符串之長度，就必須從頭到尾數算字符數目，直到遇到字符0為止。由於不設長度資訊，故C-style 字符串的長度理論上可以無上限。 Pascal程序語言採取另一種方向處理字符串。在儲存字串的記憶空間的開首，儲存一固定長度整數以表達其長度。如此Pascal-style 字符串不需要在最後增添額外字符以標明其結束。但由於字符串開首儲存字串長度的空間有限，故Pascal-style 的字串長度有上限。但在獲得字串長度方面有速度優勢。
静态变量
在C语言及由其衍生出的C++与Objective-C等程序语言中，“static”是用于控制变量的生命周期和连接方式（即其作用域，亦即可见性）的保留字。确切来说，正如C族语言中的extern，auto与register这些保留字一样，static也是一种存储类（此处的“类”与面向对象语言的“类”的定义不同）标识。每个变量与函数都有以上的一种存储类标识，如果在中没有明确标识其存储类，编译时就会根据上下文来选择其默认存储类，如在源文件里的所有文件级变量对应的默认存储类是extern，而在函数体内的变量对应的则是auto，各存储类的属性如下表所列。
汾阳话
韵母特点
C语言
见C和C++运算符。
标准模板库
模板是C++程序设计语言中的一个重要特征，而标准模板库正是基于此特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时，保有了更大的可扩展性。
Handel-C
為了要描述複雜的演算法，C語言的子集包含了所有C語言常用的特性。像許多嵌入式編譯器，浮點數資料型態都會被忽略掉。透過外部函式庫的支援，浮點數運算會變的更有效率。
比較C♯和Java
本文對比了C#与Java這兩種編程語言，這兩種語言都具有自动垃圾回收以及运行时编译执行的特点，并且兩者的语法都有主要继承自C语言/C++，因此二者有很多相似之处。但由於C#是作爲C++和Java的混合體而在Java之後所創造的，因此C#相較Java有更多的新語法特徵并且引入了一些增强的功能，所以固然兩者有其相似性，但是總歸還是有諸多不同之處。
C语言
“void main()”的用法并不是任何标准制定的。 C語言标准語法是“int main()”，任何实现都必须支持codice_12和codice_13。 在 C++ 標準中，main的標準型態應是int，否则类型是由实现定义的。任何实现都必须支持codice_14和codice_13。
名字修饰
C++语言并没有规定一个标准的名字修饰方式，所以各款编译器都使用各自的名字修饰方式。C++还有一套复杂的语言特性，例如类、模板、命名空间和运算符重载。这改变了基于上下文或用法的特定符号的意义。关于这些特性的元数据能够用改编（修饰）调试符号的名字来消除二义性。正因为这些特性的名字修饰系统并没有跨编译器标准化，所以几乎没有链接器可以链接不同编译器产生的目标代码。
C++
比雅尼·斯特勞斯特魯普博士在贝尔实验室工作期间在20世紀80年代發明並實現了C++。起初，這種語言被稱作“”（“包含‘類’的C語言”），作為C語言的增強版出現。随后，C++不斷增加新特性。虚函数（）、运算符重载（）、多繼承（）、标准模板库（, ）、异常处理（）、运行时类型信息（）、命名空間（）等概念逐漸納入標準。1998年，國際標準組織（）頒布了C++程序設計語言的第一個國際標準ISO/IEC 14882:1998，目前最新标准为ISO/IEC 14882:2020。根據《C++編-{}-程思想》（）一書，C++與C的代码执行效率往往相差在±5%之間。
Perl
Perl借用了C、sed、awk、shell脚本、Lisp以及很多其他程式語言的特性。其中最重要的特性是Perl内部集成了正则表达式的功能，以及巨大的第三方代码库CPAN。
动态语言
有限数目的动态语言提供一种叫做宏的特征，用来组合代码内省（检查类、函数和关键字，知道它们是什么、干什么、知道什么）和eval。多数现在的程序员是从C或C++中知道这个术语的，在这里它们是建造入语言的小子集中的一种静态特征，只有在程序的文本上进行字符串替换的能力。在动态语言中，它们提供对编译器的内部工作的访问，和对解释器、虚拟机或运行时系统的完全访问，允许定义可以优化代码或修改语言的语法或文法的类似语言的构造。
第三代编程语言
現今流行的程式語言，像是C语言、C++、C#、Java、BASIC及Pascal也都是第三代程式語言，不過這些語言會依照其他特質有其他的分類。大部份的第三代程式語言支援结构化编程，其中許多語言也支援面向对象程序设计，一般會用這些特質來幫程式語言分類，不會單單的只稱一種程式語言為第三代程式語言。
未定义行为
一些编程语言中，某些情况下存在未定义行为，以C和C++最为著名。在这些语言的标准中，规定某些操作的语义是"未定义的"，典型的例子就是程序错误的情况，比如越界访问数组元素。标准允许语言的具体实现做这样的假设：只要是符合标准的程序代码，就不会出现任何类似的行为。具体到 C/C++ 中，编译器可以选择性地给出相应的诊断信息，但没有对此的强制要求：针对未定义行为，语言实现作出任何反应都是正确的，类似于数字逻辑中的。虽然编译器实现可能会针对未定义行为给出诊断信息，但保证编写的代码中不引发未定义行为是程序员自己的责任。这种假设的成立，通常可以让编译器对代码作出更多优化，同时也便于做更多的编译期检查和静态程序分析。
Verilog
Verilog的设计初衷是成为一种基本语法与C语言相近的硬件描述语言。这是因为在Verilog设计之初，C语言已经在许多领域得到广泛应用，C语言的许多语言要素已经被许多人习惯。一种与C语言相似的硬件描述语言，可以让电路设计人员更容易学习和接受。不过，Verilog与C语言还是存在许多差别。另外，作为一种与普通计算机编程语言不同的硬件描述语言，它还具有一些独特的语言要素，例如向量形式的线网和寄存器、过程中的非阻塞赋值等。总的来说，具备C语言能力的设计人员将能够很快掌握Verilog硬件描述语言。
C语言
有三個標準輸入/輸出是标准I/O库預先定義的：
编程语言
除了何时以及如何确定表达式和型态的联系，另外一个重要的问题就是语言到底定义了哪些型态，以及允许哪些型态作为表达式的值。诸如C编程语言之类的低端语言允许程序命名内存位置、内存区域以及编译时的常量；ANSI C甚至允许表达式返回结构值（）。功能性的语言一般允许变量直接使用运行时计算出的值，而不是指出该值可能储存的内存地址。
C语言
C語言有两種條件語句形式，分别是if和switch。
ABC (程式語言)
ABC的设计者声称，典型的ABC程序的大小只是等价的Pascal或C程序的四分之一，并且更加具有可读性。它的关键特征包括：
内联函数
通常，在C语言中，内联展开的功能由带参宏（Macros）在源码级实现。内联提供了几个更好的方法：C++，C99. C11和GNU C都支持内联函数，然而1989 ANSI C，这个最被广泛使用的C标准却不支持。在Ada中，关键字“pragma”可以用来声明内联。其他的大部分编程语言，包括Java和函数式语言，不支持内联函数，但他们的编译器常常进行强制性的内联扩展。不同的编译器在内联扩展上有处理不同复杂程度函数的能力。主流的C++编译器如Visual C++和GCC提供了一个选项来自动内联任何一个合适的函数，即使它们没有被声明为内联函数。
C语言的历史
1989年，C语言被美國國家標準協會（ANSI）标准化，編號為ANSI X3.159-1989。這個版本又稱為C89。标准化的一个目的是扩展K&R C，增加了一些新特性。
编程语言
有许多用于特殊用途的语言，只在特殊情况下使用。例如，PHP专门用来显示网页；Perl适合文本处理；C语言被广泛用于操作系统和编译器的开发（所谓的系统编程）。
一次编写，到处编译
许多编程语言都遵循“一次编写，到处编译”的准则，如C++、Pascal （参见Free Pascal）、Ada和C语言（只要不使用标准库以外的函数）。计算机程序也可以使用可以提供抽象层来遮盖不同平台间差别的跨平台来保证代码的可移植性，如套接字、图形用户界面库。比如Lazarus和它的LCL及其窗口组件。
C++11
在此分成4個區塊來討論核心語言的特色以及變更： 執行期表現強化、建構期表現強化、可用性強化，還有新的功能。某些特性可能會同時屬於多個區塊，但在此僅於其最具代表性的區塊描述。
C语言
和:
字面常量 (C语言)
C语言经典的ASCII-0字符串，例如"Hello world!"。
C语言的历史
在ANSI的标准确立後，C语言的规范在一段时间内没有大的变动，然而C++在自己的标准化建立过程中继续发展壮大。《标准修正案一》在1994年为C语言建立了一个新标准，但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过，这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。
模块化编程
在1980年代和1990年代，模块化编程被遮盖于并经常被混淆于面向对象编程，特别是由于C++和Java的流行。例如，C语言家族中的C++（最初在1980年是具有类的C）和Objective-C（1983年）很早就已经支持了对象和类，只在30年后甚至更久之后才支持模块。Java（1995年）以包的形式支持模块，然而代码组织的主要单元是类。但是Python（1991年）从开始就突出的使用模块和对象二者，使用模块作为代码组织的主要单元，使用包作为大规模的单元；而Perl 5（1994年）包括了对模块和对象二者的支持，具有能从CPAN（1993年）获得的大量的模块。
编程范型
编程范型和编程语言之间的关系可能十分复杂，由于一个编程语言可以支持多种范型。例如，C++设计时，支持过程式编程、面向对象编程以及泛型编程。然而，设计师和程序员们要考虑如何使用这些范型元素来构建一个程序。一个人可以用C++写出一个完全过程化的程序，另一个人也可以用C++写出一个纯粹的面向对象程序，甚至还有人可以写出杂揉了两种范型的程序。
数据类型 (C语言)
由于C语言不具备自动垃圾收集（Garbage Collection）功能，使用完毕后调用codice_1来释放之前通过codice_2分配的内存。详见这里。 在C99标准中，还添加了名为伸缩型数组成员的特性，关于此特性的内容超出了该条目的介绍范围，若需了解更多信息可参见文档或其它材料。
嵌入式C语言
在早期的嵌入式应用中，工程师需要对C语言进行扩展以使系统能够支持诸如定点数，多个不同的存储器以及I/O等功能，但对于不同系统的扩展并不能通用，非标准化地扩展将会降低软件的可移植性。因此在2008年，C语言标准委员会对C语言进行了标准化扩展，以解决上述问题。扩展后的C语言在原标准C语言的基础上新增了定点运算，地址空间命名，I/O硬件寻址等嵌入式系统常用功能。嵌入式C语言依旧沿袭了大部分标准C语言的语法和语义，例如：main函数、变量定义、数据类型声明、条件判断（if, switch case）、循环语句（while, for, do while）、数组、字符串、宏定义、位操作、结构体和共同体等 。
C语言的历史
C语言最初尝试通过向B语言中增加数据类型的想法来处理那些不同类型的数据。和大多数语言一样，在C中，每个对象都有一个类型以及一个值；类型决定了可用于值的操作的含义，以及对象占用的存储空间大小。
第一代编程语言
机器语言的特点是执行速度快，效率高，但是难以学习、记忆和修改，同时它的移植性很差。
不透明指针
在程序设计中，不透明指针（Opaque pointer）是的一种特殊情况，这种資料類型被声明为指向某种未指定类型的记录或数据结构的指针。不透明指针存在于、C语言、C++、D語言和Modula-2 等多种编程语言中
定點數運算
這類的程式語言多半是在1940年至1990年之間設計的，現今的程式語言多半都不提供定點數資料類型，也不提供相關的係數轉換。有些較古老，但仍很受歡迎的程式語言也是如此，例如Fortran、C语言和C++。浮點處理器的普及，以及嚴格標準化的行為，大幅的減少二進制定點數的需求。有些程式語言支援（例如C♯和Python），也去除了大多數需要十進制固點數的需求。很少數需要固點數的情形，會由程式設計師寫程式實現，並且有明確的係數轉換，這在任何程式語言都可以實現。
标准模板库
事實上，C++的模板，本身即是一套複雜的巨集語言（macro language），巨集語言最大的特色為：所有工作在編譯時期就已完成。显式的声明函數模板之实例，與直接透過C++的多載功能隱式声明，結果一樣，並無很大區別，只是前者加重程序员的負擔，使得程式變得累贅。
Forth
使用Forth开发应用程序与使用其他语言开发应用程序的感受有很大的不同。Forth的一切都是透明的，使用者可以看到每一个功能的实现原理和过程，正是由于这一点，Forth可以作为学习操作系统及编程的非常好的工具。关于Forth编程的特点有一个较为贴切的描述："如果C语言给你的感觉是：它是最好的程序设计语言，那么使用Forth给你的感觉则是：自己是最好的程序设计师。”
Swift (程式語言)
Swift取消了Objective-C的指针和其他不安全存取的使用，舍弃了Objective C早期套用Smalltalk风格的語法，全面改为句点表示法（dot-notation）。Swift具备类型推导（type inference）。同时，它提供了类似C++、C#中的命名空間（namespace）、泛型（generic）、运算符重载（operator overloading）。Swift被簡單的形容為 “沒有C的Objective-C”（Objective-C without the C）。
Modula-3
Modula-3的设计者认为：始自BCPL的C语言家族，其优美在于以适度的代价得到了相对汇编语言的巨大飞跃，但它们接近于目标机器的低层是天然有危险性的；其中的衍生语言C++，通过增加对象丰富了C，但它放弃了C的最佳优点简单性，却没有消除它最差缺点即低层编程模型。另一个极端是LISP语言家族，它们有着混合了lambda演算和配对函数理论的，但它们趋于难以高效实现，因为在编程模型中值的统一对待，招致了所有的值都由指针统一表示的运行时间系统；这个家族的语言的良好实现避免了多数代价而能用于系统编程，但它们普遍秉性仍旧向往堆分配而非栈分配，这种运行时间系统经常将它们孤立于封闭环境中，而不能容纳用其他语言写的程序。
Cython
Cython是结合了Python和C的语法的一种语言，可以简单的认为就是给Python加上了静态类型后的语法，使用者可以維持大部分的Python語法，而不需要大幅度調整主要的程式邏輯與演算法。但由于会直接编译为二进制程序，所以性能较Python会有很大提升。
特性 (计算机科学)
如果一个元素被视作另一实体（例如codice_1）的一个属性（property，例如codice_2)，则这个元素自身可以有零或多个特性attributes（或属性properties) ，如codice_2可有codice_4。 C#语言中，特性是元数据，附加于字段或代码块，如(assemblies)、成员变量、数据类型，等价于Java注解。编译器与反射式编程可访问特性。
C语言的历史
本文记述了C语言自20世纪70年代至今的历史及发展。
五大性格特质
C1能力（COMPETENCE）
C与C++的兼容性
这是因为在C语言中，struct类型前需要添加“struct”，而在这个例子中，因为T前没有struct，所以它所代表的是在外部定义的int变量；而在C++中，因为可以省略struct，因此造成了歧义。然而，在C++中如果使用这种形式，编译器会更倾向于认为T是一个表达式，因此编译会出错；而在C语言中则不会。
C语言
例如：
指標 (電腦科學)
指向函数的指针：不同于指向数据类型的指针，函数指针指向一段可执行的代码的首地址，这段代码仍然占用了一块内存空间。，因为它最多只有结构体的定义，而没有类的概念。根据本段所述，可以认为C语言能成为面向对象的语言，只是表述比较麻烦而已。事实上很多开源程序都使用这种方式组织他们的代码。
C语言的历史
K&R C主要引入了以下语言特性：即使在後來ANSI C標準被提出的許多年後，K&R C仍然是許多編譯器的最低標準要求，許多老舊的編譯仍然運行K&R C的標準。
硬件描述语言
可以使用传统的编程语言控制流程的特性来指代硬件的数据流性质，例如包含特定增强类库的C++（如SystemC）即可实现这样的目的。尽管如此，用于软件设计的编程语言不能对电路的时序性质进行描述，这导致软件编程语言不能替代专用的硬件描述语言。在最近地位愈加显著的硬件验证语言——SystemVerilog出现之前，人们利用C++和一些逻辑仿真工具协同工作，从而在硬件验证中实现面向对象程序设计的思想。
C风格字符串
由于这些显著的特点，为了区分C++中这两种不同的字符串，使用“C风格字符串”来特指来源于C语言的字符串存储方式。
面向对象程序设计
面向对象程序设计在80年代成为了一种主导思想，这主要应归功于C++——C语言的扩充版。在图形用户界面（GUI）日渐崛起的情况下，面向对象程序设计很好地适应了潮流。GUI和面向对象程序设计的紧密关联在Mac OS X中可见一斑。Mac OS X是由Objective-C语言写成的，这一语言是一个仿Smalltalk的C语言扩充版。面向对象程序设计的思想也使事件处理式的程序设计更加广泛被应用（虽然这一概念并非仅存在于面向对象程序设计）。一种说法是，GUI的引入极大地推动了面向对象程序设计的发展。
面向特性编程
C#语言从最早期发行就支持特性。但是这些特性被用于得到运行时间信息，而不被预处理器所使用（在C#参考实现中一个都没有）。
类 (计算机科学)
支持类的编程语言在支持与类相关的各种特性方面都多多少少有一些微妙的差异。大多数都支持不同形式的类继承。许多语言还支持提供封装性的特性，比如访问修饰符。类的出现，为面向对象编程的三个最重要的特性（封装性、继承性、多态性），提供了实现的手段。
C语言的历史
2011年12月8日，ISO正式发布了新的C语言的新标准C11（之前被称为C1X），官方名称为ISO/IEC 9899:2011。新的标准提高了对C++的兼容性，并增加了一些新的特性。这些新特性包括泛型、多執行緒、帶邊界檢查的函式、匿名結構等。
链接性
C++隐式把具有codice_1限定的命名空间中的变量处理为内部链接性，除非在codice_1限定声明之时或之前已经声明为codice_3。这与C语言完全不同。
C18 (C语言标准)
C18没有引入新的语言特性，只对C11进行了补充和修正。
反射式编程
早期计算机的原生汇编语言本质上就具有反射特性。因为这些最初架构可以通过定义指令作为数据及使用自修改代码来编程，实现反射功能是很平常的。编程发展到使用编译型高级语言如Algol、Cobol、Fortran和包括Pascal和C在内的很多其他语言时，自修改代码等实践很大程度上消失了，直到将反射特性内建入类型系统的高级编程语言出现后才再次提供了反射功能。Lisp语言家族以具有同像性作为标志性特征，可以认为具有反射性。
C♯
针对于.NET SDK 2.0（相对应于ECMA-334标准第三版），C# 的新特性有：
C语言
例如：
C语言的历史
C18没有引入新的语言特性，只对C11进行了补充和修正。
C程序设计语言 (书)
我们尽力保持第一版的简洁性。C语言不是一种大型语言，也不需要用一本很厚的书来描述。我们在讲解一些关键特性（比如指针）时做了改进，它是C语言的核心。我们重新对以前的例子进行了精炼，并在某些章节中增加了一些新例子。例如，我们通过实例程序对复杂的声明进行处理，以将复杂的声明转化成描述性的说明或反之。像前一版中的例子一样，本版中所有例子都是以机器可读的文本形式直接通过了测试。 在ANSI C出现之前，这本书的第一版一般是C编译器作者的参考标准。随着ANSI C的标准化，第二版的更加面向程序员而不是针对编译器作者，在作者在第二版序言中写道：
C++14
以下为在C++14中被加入语言核心的特性。 在C++11中，lambda函数的形式参数需要被声明为具体的类型。C++14放宽了这一要求，允许lambda函数的形式参数声明中使用类型说明符codice_1。
Unicon (编程语言)
相较于Icon，Unicon的很多新特征是对I/O和系统接口的扩展，和补全Icon的核心控制及数据结构。并非提供来自C语言的低层API，Unicon实现了更高层级和更易使用的设施，确使集中于图形和网络的应用的快速开发，是对Icon在文本和文件处理上的核心力量的补充。在作为图形IDE运行的时候，Unicon程序ui.exe继续提供到Icon帮助的链接。
Objective-C
Objective-C是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSI C编程语言，将Smalltalk式的消息传递机制加入到ANSI C中。目前主要支持的编译器有GCC和Clang（採用LLVM作為後端）。
Visual C++名字修饰
C++语言由于含有大量复杂的语言特性，如classes, templates, namespaces, operator overloading等，这使得对象的名字在不同使用上下文中具有不同的意义。所以C++的name mangling非常复杂。
Objective-C
C#与Visual Basic.NET语言以的与不完全类的方式实现了类似的功能。[[Ruby]]与一些动态语言则以"[[猴补丁|Monkey patch]]"的名字称呼这种技术。
Visual Basic
VB是一种充满了争议的语言：很多程序员对VB程序的品质有强烈的反感。很多人认为VB不配他们使用，认为它是一种给儿童和菜鸟程序员的语言。它自从设计开始就是一种简单的语言。一些C++和Java中的特性在VB中并没有出现。在感受开发的方便和快速的同时，一些类似于编译时进行类型和声明检查的功能在默认情况下是关闭的。这样一些程序员一边感叹VB的易用性，一边沮丧地看着一些类似于“未定义类型”错误的发生。
C语言
C是一种通用的程式語言，广泛用于系统软件与应用软件的开发。于1969年至1973年間，為了移植與開發UNIX作業系統，由丹尼斯·里奇與肯·汤普逊，以B语言为基础，在贝尔实验室設計、开发出來。
达夫设备
一方面，C语言对switch语句的规范较松。达夫设备发明时，正值《C程序设计语言》第一版引领C语言规范，而按其中规定，在switch控制语句内，条件标号（case）可以出现在任意子语句之前，充作其前缀。另外，若未加入break语句，则在switch语句在根据条件判定，跳转到对应标号，并开始执行后，控制流会无视其余条件标号限定，一直执行到switch嵌套语句的末尾，此即switch语句的“掉落”（fall-through）特性。利用以上特性，这段代码便可从连续地址中将count个数据复制到存储器映射输出寄存器中。
Lush
Lush（Lisp Universal SHell）是一种面向对象语言，一般应用于科研，工程等需要大规模数值计算或图像处理的领域。其特点是把灵活易用的弱类型解释性语言（如Python，Perl，MATLAB等，Lush使用Lisp表达式），与编译性语言C、C++等的代码集成一体。Lush使用Lisp形式的表达式，但是整个程序（甚至某一函数体内）中可以与C语言混合编程。
Ada
Ada语言的重要特征就是其嵌入式风格，模块化编程，编译检查，平行处理，异常处理及泛型编程。Ada在1995年加入了对面向对象设计的支持，包括动态分配等。
C与C++的兼容性
C语言和C++的关系十分密切，但是也有许多显著的差异。C++标准起源于早期C标准, 并被设计为与当时的C语言在源代码编写和链接方面很大程度上兼容. 因此，两种语言的开发工具（例如IDE和编译器）通常被集成到单个产品中，程序员可以自己选择编写的是C还是C ++，开发工具通常会根据程序员的选择使用不同的编译器和链接器或不同的库。