`
mycream
  • 浏览: 55442 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C扩展知识

阅读更多

大一学习C时的学习笔记,放出来共享下,嘻嘻。不过当时使用的编译器是TC或者VC6.0,即使用的C标准是C90而非最新的C99标准,故和现在的编译结果有些许出入。当然学习以动手为主,照搬书上的知识是学不到任何东东的。本文仅供拓展自我使用。

 

C扩充知识 (2008年2月13日整理)

1.变量的声明和定义:
#1.带有初始化的语句是定义。如:int a = 1; /* 定义 */
#2.带有 extern 的语句是声明(除非对变量进行重新初始化)[尽量不要,会产生二义性,但系统会当成定义同时警告]
如:extern int a; /* 声明 */
extern int b = 2; /* 定义,但系统会警告,尽量不用 */
#3.既没有初始化又没有 extern 的语句是“暂时定义(tentative definition)”
如:int a; /* 暂时定义 */
[注:暂时定义是C语言特有的,C++没有这个概念,相反,C++推行“只定义一次”原则(one definition rule),这导致在C里面是

暂时定义的语句在C++里都是C正式的定义。为防止之间迁移带来的问题,最好要么声明,要么定义,并且只能定义一次。

2.编译和链接:
分为四个阶段,分别由不同的程序完成:
第一阶段:由预处理程序执行C源文件中的预处理指令;
第二阶段:C编译器把经过预处理的C代码文件编译成汇编代码文件;
第三阶段:汇编编译器把汇编代码文件编译成目标代码文件;
第四阶段:链接程序把所有目标代码链接起来产生可执行文件。

3.对齐(alignment)(TC中未发现使用):
为了提高效率,编译器一般都会把数据安放到适合它们的地址。譬如int占4个字节,则凡是int变量的地址都是4的倍数,称为“4字

节对齐”。此时其他数据也会依照该规则分配空间。

struct s
{ char a;
int b;
}
此时该结构体内存分配为
       ┌───────┐┐
       │  char │┆
       ├───────┤4字节
       │   空  │┆
       ├───────┤┤
       │   int   │4字节
       └───────┘┘
       
因此此结构占用8字节内存空间,而非5字节。

4.词法分析:
“最大匹配“原则”:编译器(包括预处理程序和编译程序)在遇到“空白”(如空格、回车、制表符等)之前,以能够取得的、

有意义的、最长的字符作为记号。

5.注释注意与原则:
C90标准中只有一种注释风格,就是使用“/*”和“*/”。
注意该风格不支持嵌套使用,
即/* something /* something else */ */
编译时第一个“/*”和第一个“*/”的内容全部被屏蔽,而留下最后一个“*/”,这样便导致了编译错误。
目前大部分编译器都“暗中”支持“//”的使用
原则:
#1. 字符串里面的注释等不起注释作用;
#2. 注释符里的双引号不起标识字符串的作用;
#3. 如果情况混乱则从头找起。

6.typedef注意:
#1. typedef 跟变量一样有可视范围,并且内层的可以覆盖外层的。
#2. (在同一作用范围内)不能用相同的名字定义不同的数据类型。
如:

typedef int INT32;
typedef long INT32; /*ERROR*/

 

C语言中一模一样的typedef不能重复出现

typedef int INT32;
typedef int INT32; /*ERROR*/

 

但C++中正确。

#3.用typedef定义的类型不能“组合使用”

typedef int INT32;
unsigned INT32 a; /*ERROR 此时用#define解决*/

 

#4. typedef char * String;
const String s;
等价于 char* const s; 而非 const char * s;

因为当用 typedef 定义了一种新的类型 String 之后,const 修饰的对象就是 String,而 String本身是指针,于是 const

String 的意思就是 String (某种指针)的值是常量,所以最后 s 就被理解为指向 char 的 const 指针。

7.源代码行可以在下一行继续,只要在第一行末尾加上反斜杠(“\”)。或标准C语言三字符组 ??/
例:

if (a == b) x = 1; el\
se x = 2;
// 等价于:
if (a == b) x = 1; else x = 2;

 

8.宏定义中:
#把宏参数变为字符串 #define s #abc 展开为“abc”
##把两个参数贴合在一起 #define A a##b 展开为“ab”

9. 定义了数组后,数组名不完全等同于指针。因此,可用sizeof(a)/sizeof(a[0])求数组长度。
如:

int a[10], * p;
p = a;
// sizeof(a)为40;
// sizeof(p)为2;

 

10.const区别注意:
1. const int a;
2. int const a;
3. const int * a;
4. int * const a;
5. int const * a const;

1、2作用一样:a是一个常整型数。3中a是指向一个常整型数的指针(整型数不可变,指针指向可变)
4中a是指向整型数的常指针(指向的数可变,指针指向不可变)。
5中a是指向常指针(都不可变)

11.#、##补充:
宏扩展期间,#和正式参数名换成相应的包含在字符串引号当中的实际参数。生成字符串时,记号参数表中的每个空白序列换成一个

空格符,任何嵌入引号和反斜杠前加上一个反斜杠以保留其在字符串中的含义。参数开头和末尾的空白符忽略。

 

分享到:
评论

相关推荐

    C语言中无符号扩展和带符号扩展知识讲解.doc

    C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持...C语言中无符号扩展和带符号扩展知识讲解

    C语言扩展IMAGINE功能

    IMAGINE开发者工具包(CToolkit)为有经验的C/C++程序员提供了丰富的库和文档,允许用户进行软件商业版本的修改或者开发全新的应用程序以扩展软件功能。在EML(EM Software)中,用户可以利用“ImageMetadata”显示...

    C语言主要知识点巩固(学习Objective-C 的前提)

    在掌握了这些C语言基础知识后,你将更好地理解和学习Objective-C,因为Objective-C是在C语言的基础上扩展的面向对象编程语言,它保留了C的大部分语法,并引入了类、消息传递等面向对象特性。因此,牢固的C语言基础...

    C语言扩展Python学习记录.zip

    通过学习和实践C语言扩展Python,你可以创建高效的库,处理底层操作,或者利用现有的C库来增强Python的功能。这个过程需要对Python的内部机制有深入的理解,但一旦掌握,你将能够解锁Python开发的更广阔天地。

    c语言基础知识.pdf

    这些版本不仅遵循了ANSI C的标准,而且还根据各自的需求进行了扩展和优化,使其更加方便和强大。 #### 四、面向对象编程语言C++ C++是在C语言的基础上发展起来的一种面向对象的编程语言。1983年由Bjarne ...

    C语言字符串处理函数扩展

    本篇将详细讲解在"C语言字符串处理函数扩展"这一主题中,可能涉及到的知识点。 首先,我们来看`stringAPIext.c`和`stringAPIext.h`这两个文件。`stringAPIext.c`通常包含实现这些扩展函数的代码,而`stringAPIext.h...

    嵌入式: C语言知识点 C51单片机及C语言知识点必备秘籍

    2. **C51单片机简介**:C51是Keil公司为8051系列单片机开发的一种编译器,它扩展了标准C语言,增加了对硬件寄存器的直接访问。了解C51的特点、指令集以及如何配置和使用C51开发环境是学习C51编程的第一步。 3. **...

    单片机的C语言编程基础知识

    ### 单片机C语言编程基础知识详解 #### 一、引言 单片机作为一种集成了微处理器、存储器及多种输入输出接口的微型计算机系统,因其体积小、成本低、可靠性高等特点,在嵌入式系统开发领域有着广泛的应用。对于初学...

    CDIO视域下C语言扩展性实践教学模式的构建与实施.pdf

    在CDIO视域下,C语言扩展性实践教学模式的构建与实施主要针对当前应用型本科院校中C语言教学存在的问题,旨在打破课程间的界限,强化实践教学,以提升学生的综合能力和专业技能。传统的C语言教学往往侧重于基础知识...

    使用C语言来扩展Python程序和Zope服务器的教程

    在讨论如何使用C语言扩展Python程序和Zope服务器时,我们首先要了解Python扩展的基础知识。Python扩展本质上是用C语言编写的动态链接库,它可以被Python解释器在运行时加载。使用C语言编写扩展的好处包括提高性能,...

    c语言知识点总结.docx

    C程序的扩展名通常是`.c`,其执行过程包括编辑、编译、链接和运行四个步骤。编译产生的目标文件扩展名为`.obj`,链接后的可执行文件扩展名为`.exe`。 程序结构分为三种:顺序结构、选择结构(分支结构)和循环结构...

    C扩展Lua的样例考虑到实际项目中经常遇到本地化需求的情况

    通过C语言扩展Lua不仅可以增强Lua的功能,还能提高程序的整体性能。特别是在需要本地化支持或高性能计算的情况下,这种扩展方式非常有用。不过,在实际操作过程中也需要关注细节问题,如编译环境的一致性、错误处理...

    使用C语言扩展Python程序的简单入门指引

    总结来说,文档中提到的知识点不仅覆盖了使用C语言扩展Python的基础理论,也包含了实际操作的细节,如对象的引用计数、数据类型的转换以及使用Python C API进行编程实践。掌握这些知识点,可以大大提升Python程序的...

    \单片机C语言入门知识

    - **《更多电子书下载.html》**:可能包含更多单片机和C语言相关的电子书资源,用于深入学习和扩展知识。 - **《E书说明.txt》**:可能提供了这些电子书的使用指南或阅读建议。 学习单片机C语言,不仅需要理论...

    C语言基础知识1

    【C语言基础知识1】 C语言是一种强大的编程语言,起源于20世纪70年代初的美国电话电报公司(AT&T)贝尔实验室。B.W.Kernighan和D.M.Ritchie共同撰写了《THE C PROGRAMMING LANGUAGE》一书,简称《K&R》,成为C语言...

    C必知必会C必知必会C必知必会C必知必会

    "C必知必会"意味着理解和掌握C语言的关键概念和技术是至关重要的。本篇将详细阐述C语言中的核心知识点,帮助你深入理解这一强大的编程语言。 1. **基础语法**:C语言的语法简洁明了,包括变量声明、数据类型(如int...

    C语言基础知识2

    首先,C语言源程序通常以`.c`为扩展名,如示例所示的求两数和的程序。程序的执行总是始于`main`函数,这也是程序的入口点。`main`函数必须小写,其后跟随一对小括号,里面不放置任何内容。函数体是程序的主体,包含...

    c语言函数及相关知识

    本篇文章将深入探讨C语言函数及其相关知识。 一、函数定义与声明 1. 函数定义:定义一个函数意味着为它指定返回类型、函数名以及参数列表。例如: ```c int add(int a, int b) { return a + b; } ``` 在这个例子中...

Global site tag (gtag.js) - Google Analytics