标签:#C语言

共 23 篇文章

C与C++的兼容性

C语言和C++的关系相當密切,但是也存在许多显著的差异。C++标准起源于早期C标准,并被设计与当时的C语言在源代码编写和链接方面很大程度上兼容。因此,两种语言的开发工具(例如IDE和编译器)通常被放到单个产品中,程序员可以自己选择编写的是C还是C++,开发工具通常会根据程序员的选择使用不同的编译器、链接器和不同的函式库。 但是,C并不是C++的一部分,一般的C代码不经修改,很难严格符合C++标准;同样,C++引入了许多C中没有的特性,所…

结构解引用运算符

结构解引用运算符(),也称“通过指针访问成员运算符”(Element selection through pointer),是 C语言与C++的->运算符。其功能是获取运算符左侧的指针所指向的对象的某个成员()。例如: struct foo{ int value; } foo p=new foo(); std::cout 该运算符的优先级较高,与函数调用运算符( )、数组下标运算符[ ]、通过引用选择成员运算符.相同。也是自左向右结合。…

块 (C语言扩展)

块(blocks)是由LLVM提出的类似于lambda表达式的非标准C语言扩展,亦可以应用于Objective-C与C++中。它的语法类似于这些函数中的闭包,即由大括号包括的语句块。 苹果设计块的一个目的是使设计基于Grand Central Dispatch线程结构的程序更容易,但块是独立于这一构架的,它也可以在其它程序中以与普通语句块十分相似的方式应用。苹果已经在苹果修改版的GCC编译器以及Clang LLVM编译器前端中实现了这一…

可变参数宏

可变参数宏是C语言与C++语言的宏的参数个数可以是0个或多个。这一语言特性由C99引入。C++11也开始支持。 声明语法 声明语法类似于可變參數函數:逗号后面三个句点"...",表示一个或多个参数。但常见编译器也允许传递0个参数。宏扩展时使用特殊标识符__VA_ARGS表示所传递的参数的替换。 没办法访问可变参数列表内的单个参数,也不能获知多少个参数被传递。 实现支持 C/C++编译器支持: GNU Compiler Collectio…

达夫设备

在计算机科学领域,达夫设备(英文:Duff's device)是串行复制(serial copy)的一种实现,通过汇编语言编程时一常用方法,实现展开循环,进而提高执行效率。这一方法据信为当时供职于卢卡斯影业的于1983年11月发明,并可能是迄今为止利用C语言特性所作的最巧妙的实现。 优化背景 在编程时,循环展开注重于利用批量处理,减少总处理分支数。而在串行复制数据时,当总循环次数无法被展开后循环的增量整除时,一般就用直接跳转到展开后循环…

C预处理器

C预处理器是C语言、C++语言的预处理器。用于在编译器处理程序之前预扫描源代码,完成头文件的包含,巨集扩展,,行控制(line control)等操作。 编译阶段 C语言标准规定,预处理是指前4个编译阶段(phases of translation)。 三字符组与双字符组的替换 行拼接(Line splicing): 把物理源码行(Physical source line)中的换行符转义字符处理为普通的换行符,从而把源程序处理为逻辑行的…

国际C语言混乱代码大赛

國際C語言混亂程式碼大賽(IOCCC, The International Obfuscated C Code Contest)是一項國際程式設計賽事。從1984年開始,该賽事除去1997年、1999年、2002年、2003年和2006年外每年舉辦一次。该賽事的目的是寫出最有創意並讓人難以理解的C語言程式碼。 在参赛作品從線上提交后,需要經過多次審核,以混亂的程度和創造性评判代碼。通過最後一輪審核的作品會被歸入不同的獎項,例如「最濫用C…

数组

在計算機科學中,陣列資料結構(),簡稱数组(),是由相同类型的元素(element)的集合所組成的資料結構,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素對應的儲存地址。 最簡單的資料結構類型是一維陣列。例如,索引為0到9的32位元(4個位元組)整數陣列,可儲存10個變量,位於記憶體位址2000,2004,2008,...2036中,因此索引為i的元素即在記憶體中的2000+4×i位址。陣列第一個元素的記憶體位址…

联合体

在计算机科学中,联合体()又名共用體,是一种具有多个类型或格式的值,或者把它定义为一种由具有这样的值的变量形成的数据结构。一些编程语言可以支持被称为“联合体”的特殊的資料類型,来表示上述的变量。与枚举和结构体不同的是,一个联合体的长度等于其内部长度最大的成员的长度,并且它们都共享着同一段内存。 在C語言中,一個典型的例子如下: union name1 { int a; float b; char c; } uvar; 外部链接 [htt…

未定义行为

在计算机程序设计中,未定义行为()是指执行某种计算机代码所产生的结果,这种代码在当前程序状态下的行为在其所使用的中没有规定。常见于翻译器对源代码存在某些假设,而执行时这些假设不成立的情况。 一些编程语言中,某些情况下存在未定义行为,以C和C++最为著名。在这些语言的标准中,规定某些操作的语义是未定义的,典型的例子就是程序错误的情况,比如越界访问数组元素。标准允许语言的具体实现做这样的假设:只要是符合标准的程序代码,就不会出现任何类似的行…

UNIX環境高級編程

《-{zh-cn:UNIX环境高级编程;zh-tw:高等UNIX程式設計}-》(,简称APUE)是理查德·史蒂文斯(Richard Stevens)写的一本介绍UNIX环境C语言编程接口的书籍。被UNIX C程序员誉为“圣经”。 简介 本书最早问世于1992年,全面而细致地展示了UNIX系统的C接口,受到读者的普遍欢迎和好评。UNIX的原创者之一——丹尼斯·里奇(Dennis Ritchie)也认为它是“公认的优秀、匠心独具的名著”。 …

头文件

头文件(),或包含文件,是个在程序设计時,特别是在C语言和C++中使用的文件,通常是源代码的形式,由编译器在处理另一个源文件的时候自动包含进来。一般来说,程序员通过编译器指令将头文件包含进其他源文件的开始(或头部)。 头文件一般包含类、子程序、变量和其他标识符的前置声明。需要在一个以上源文件中被声明的标识符可以被放在一个头文件中,并在需要的地方包含这个头文件。 在C语言的C标准函式库和C++的C++标准函式库中,标准库函数习惯上在头文件…

字面常量 (C语言)

字面常量(literal constant),是C程序设计语言与C++语言的词法上的概念(lexical conventions),是指源程序中表示固定值的符号(token)。 下述内容遵从C11与C++11语言标准。 整型字面常量 包括下述的数值进制: 10进制: 如1234; 8进制:如0373; 16进制:如0x2a7; 2进制(从C++14开始):如0b101; 或者0B0101; 整型字面量转化为整数类型表示,依照下述顺序: …

LabWindows/CVI

LabWindows/CVI (CVI是“C语言用于Virtual Instrumentation”的缩写)是C语言编程环境,用于测试/度量,由National Instruments开发. 所用的库与数据获取模块与更为知名的National Instrument产品LabVIEW几乎完全一致。 LabVIEW着眼于领域专家与科学家;而CVI更着重于习惯于文本线性编程语言的软件工程师。 版本历史 从LabVIEW 8.0开始, 主要版本…

C替代标记

C替代标记指一批C语言常见运算符的可选拼写。它们实现为C標準函式庫中iso646.h头文件内的一组定义。此标记作为C90标准的修正案于1995年增补。 替代标记允许程序员使用C语言按位和逻辑,原先的标记在一些国际和非QWERTY键盘上很难输入。根据ISO/IEC 646标准实现的头文件有一些区域性的变化,其中一些用重音字符替换了C运算符使用的标点符号。 定义 在iso646.h中定义了11个: C++ 以上标识符全部是运算符关键字,因此…

整型提升

整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。 这一规则是由C语言的发明人丹尼斯·里奇与肯·汤普逊创设的: 这段话的大意是:表达式中可以使用整数的地方,就可以使用枚举类型,或有符号或无符号的字符、短整数、整数位域。如果一个int可以表示上述类型,则该值被转化为int类型的值;否则,该值被转化为unsigned i…

预编译头

预编译头(precompiled header)是程序设计时把头文件编译为中间格式(如目标文件),以节约在开发过程中编译器反复编译该头文件的开销。 C语言、C++语言、Objective C语言等都有类似的技术。 有的头文件包含了巨量的源代码(如著名的windows.h),或者使用模板编程时要生成巨大的头文件模板库(如与)。为减少编译时间,某些编译器允许把头文件编译为某种中间形式称为预编译头(precompiled header),后续…

灵活数组类型

灵活数组类型是C99引入的语言特性。即在struct数据类型的最后一个数据成员,可以为一个未指明长度的数组类型。例如: struct double_vector_st { size_t length; double array[]; // the flexible array member should be last }; sizeof运算符作用于这个struct,返回灵活数组成员的偏移量。在堆上分配这种struct,应该保留灵活数组…

Time.h

time.h是C标准函数库中获取时间与日期、对时间与日期数据操作及格式化的头文件。 表示时间的三种数据类型 日历时间(Calendar Time),是从一个标准时间点(epoch)到现在的时间经过的秒数,不包括插入闰秒对时间的调整。开始计时的标准时间点,各种编译器一般使用UTC 1970-01-01 00:00:00。日历时间用数据类型time_t表示。time_t类型实际上一般是32位整数类型,因此表示的时间不能晚于UTC 2038-…