`
mycream
  • 浏览: 54079 次
  • 性别: 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语言学习笔记——基础知识篇

    包括我学习C语言时的学习笔记和一份C的函数PDF格式文件,其中包括几乎所有的C的基本语法和概念,适合C语言初学者或者C语言复习和扩展。

    C语言高级编程及实例剖析

    C语言高级编程及实例剖析,是在C语言的基础之上的一本很好关于C语言扩展知识学习的书。

    c语言你知识点总结

    C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中,一定不能出现分号,源程序扩展名为.c,目标文件扩展名.obj,可执行文件扩展名.exe。 2、每个C语言程序中main函数是有且只有一个。 3、在函数中不可以再...

    c程序设计 知识要点

    1.2. 用C语言编写和程序称作C源程序,简称C程序,C程序可由若干个文本文件组成,文件扩展名为C(使用C++编译器时默认扩展名为CPP)。C源程序经编译、连接后得到扩展名为EXE的可执行文件(目标程序)。 预处理 编译、...

    C语言嵌入式Linux编程第5期:C标准及GNU C扩展

    本课程是《C语言嵌入式Linux编程》第5期主要内容包括:Linux内核、驱动程序中,GNU C对标准C扩展的大量的语法。学员在掌握这些扩展语法的基础上,消除阅读Linux内核、驱动、GNU开源软件的障碍。能够看懂这些“稀奇...

    VisualC++MFC扩展编程实例(pdf)

    本书主要介绍了运用Visual C++ 5.0或6.0的高级编程技巧,内容涉及MFC程序设计的最新概念,全书提供了大量VC的编程实例,旨在帮助读者较为全面地掌握VC编程知识、技巧和方法。全书分为三个部分和附录。第一部分介绍...

    VISUAL C MFC扩展编程实例与源码

    Visual c++ MFC扩展编程实例及源代码,非常经典的学习教材 本书主要介绍了运用Visual C++ 5.0或6.0的高级编程技巧,内容涉及MFC程序设计的最新概念,全书提供了大量VC的编程实例,旨在帮助读者较为全面地掌握VC编程...

    依托腾讯云基础服务架构,采用C扩展框架Phalcon开发,致力开源网课系统,开源网校系统,开源知识付费系统,开源在线教育系统

    酷瓜云课堂,依托腾讯云基础服务架构,采用C扩展框架Phalcon开发,GPL-2.0开源协议,致力开源网课系统,开源网校系统,开源知识付费系统,开源在线教育系统。实现了点播、直播、专栏、面授、问答、会员、积分、秒杀...

    C程序设计讲义.zip

    扩展课部分包含编辑器的断点调试、C语言扩展等知识,让大家养成独立动手解决问题的习惯和兴趣。 本套课程的设计目的是使零基础自学的同学完成全部作业之后可以不低于计算机相关专业C语言的平均水平。

    C语言程序设计-知识点复习资料.pdf

    C语言是一种通用的高级编程...许多流行的编程语言(如C++、Java和Python)都是通过在C语言基础上扩展而来的。 总而言之,C语言是一种功能强大、灵活且广泛应用的编程语言,被广泛用于各种计算机软件和硬件系统的开发。

    C语言编程魔法书:基于C11标准.mobi

    语法扩展篇(第17~19章)讲述了GCC与Clang编译器对C语言的扩展,以及C语言的设计理念、未来C语言新添与排除特性。需要对底层交互与开发深入了解的读者大有裨益。 项目实践篇(第20~21章),UTF-8与UTF-16编码程序...

    C语言程序设计实例精粹3-9

    源代码文件有助于读者对照正文进行阅读,查看C语言编程知识,同时可作为读者二次开发的基础,进行功能扩展。源代码经过了充分调试和测试,可以直接进行编译。 可执行文件是可直接运行的程序,读者可以启动,然后观察...

    C语言开发手册

    首先,介绍了 C 语言及其开发环境,并全面介绍了 C 语言的基本语法知识;接着,详细讲解了 C 语 言的一些高级程序应用;然后,介绍了 C 语言与其他主流编程语言的接口;最后,讲解了现代 C 语言的 一些扩展应用和...

    问答式OWL知识检索技术

    范,并以扩展语言为知识表示方式,探讨了PNL式模糊知识问答系统。应用实 例说明以扩展语言为知识源,利用模糊描述逻辑的推理机制和PNL式问答框架 可以处理一些带模糊概念的自然语言问题。 总之,本文可以作为问答式...

    C语言程序设计实例精粹压缩包(1)

    源代码文件有助于读者对照正文进行阅读,查看C语言编程知识,同时可作为读者二次开发的基础,进行功能扩展。源代码经过了充分调试和测试,可以直接进行编译。 可执行文件是可直接运行的程序,读者可以启动,然后观察...

    VISUAL C++MFC扩展编程实例(强烈推荐)

    本书主要介绍了运用Visual C++ 6.0的高级编程技巧,内容涉及MFC程序设计的最新概念,全书提供了大量VC的编程实例,旨在帮助读者较为全面地掌握VC编程知识、技巧和方法。全书分为三个部分和附录。第一部分介绍Windows...

    cprimer5_jb51.rar

    c primer plus第五版中文版适合程序员和开发者学习,c primer plus第5版专门针对C语言的最新标准C99而作,它覆盖了这个新标准所引入的所有重要的新特性,C编程相关的扩展的整数类型、扩展的字符支持、指定初始化项目...

    Visual C++ MFC扩展编程实例

    本书主要介绍了运用VisualC++5.0或6.0的高级编程技巧,内容涉及MFC程序设计的最新  概念,全书提供了大量VC的编程实例,旨在帮助读者较为全面地掌握VC编程知识、技巧和方  法。  全书分为三个部分和附录。第一...

    C语言程序设计-精选习题和案例

    C语言程序设计-精选习题和案例,按知识点精心设计试题,不重复知识点。精选案例并设计高质量代码,强调启发性和思维训练。知识点按C语言核心知识结构严格划分,精选经典试题;主要案例:进制转换,闰年判断,计算器...

Global site tag (gtag.js) - Google Analytics