C专家编程:第一章 C穿越时空的迷雾

C诡异离奇,缺陷重重,却获得了巨大的成功.

编译器设计者的金科玉律:

效率几乎就是一切。

C语言根据编译器设计者的思路而发展形成的语言特性:*

  • 数组下标从0而不是从1开始
  • C语言的基本数据类型直接与底层硬件相对应 auto关键字显然是摆设(auto:在进入程序块时自动进行内存分配)
  • 表达式中的数组名可以看作是指针
  • float被扩展为double
  • 不允许嵌套函数(函数内部包含另一个函数的定义)
  • register关键词 将变量存放在寄存器中

C预处理器实现的3个主要功能:

  • 字符串替换:通常用于为常量提供一个符号名。
  • 头文件包含:一般性的声明可以被分离到头文件中,并且可以被许多源文件使用
  • 通用代码模板的扩展。
  • 宏的扩展中,空格对扩展的结果造成很大的影响。

宏最好只用于命名常量,并为一些适当的结构提供简捷的记法。宏名应该大写。千万不要使用C预处理器来修改语言的基础结构。

ANSI C中最重要的特性就是“原型”,这种特性取自C++。原型是函数声明的扩展,函数名、返回类型、形参类型都是已知的。这就允许编译器在参数的使用和声明之间检查一致性。

  • 原型的目的:当我们对函数作前向声明时,在形参类型中增加一些信息。

赋值的约束条件之一:两个操作符都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向的全部限定符。

char *cp;
const char *ccp;
ccp = cp;
  • 左操作数是一个指向有const限定符的char的指针。
  • 右操作符是一个指向没有限定符的char的指针。
  • char类型与char类型是相容的,左操作符所指向的类型具有右操作符所指向类型的限定符(无),再加上自己的限定符(const)。

1. const float*类型并不是一个有限定符的类型——它的类型是“指向一个具有const限定符的float类型的指针”,也就是const限定符是修饰指针所指向的类型,而不是指针本身。
**2.const char 是指向有const限定符的char类型的指针的指针。

容易混淆的const

  • 关键词const并不能把变量变成常量。在一个符合前加上const限定符只是表示这个符合不能被赋值。它的值对于这个符合来说是只读的,但它不能防止通过程序的内部(甚至是外部)的方法来修改这个值。const最有用之处就是用它来限定函数的参数,这样该函数将不会修改实参指针所指的数据。
  • const和*的组合通常值=只用于在数组形式的参数中模拟传值调用。它声称“我给你一个指向它的指针,但你不能修改它。”通常被限制于把指针从一种类型转换为另一个类型。

对无符号类型的建议:

  1. 尽量不要在你的代码中使用无符号类型,以免增加不必要的复杂性。
  2. 尽量使用像int那样有符号类型。
  3. 只有在使用位段和二进制掩码时,才可以用无符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值