c专家编程-第一章穿越时空的迷雾

1 c编译器预处理功能

字符串替换,包含头文件,通用模块扩展

2 关于编译器的特性

不可移植的代码

未确定的

未定义的

坏的代码

编写可移植的代码:1)最好严格遵循语言标准 ,只使用已经确定的特性2)不突破任何由编译器所实现的限制 3)对于未确定的、未定义的、不产生依赖代码

3 关于通用模块扩展(宏的使用)

一般宏用法,括号会产生错误的表达形式

#define a(x) a_expanded(x)

a(x);

等价于 a_expanded(x)

如果有空格 

#define a (y) a_expanded (y)

a(x);

实际上变为:(y) a_expanded (y)(x)

4 数值类型自动升级

最好使用有符号型数值变量,对于无符号类型很容易带来数值自动升级后的错误运算

或者用强制类型转换。

#define TOTAL_ELEMENTS (sizeof(array)/(sizeof(array[0])))

int d=-1,x;

if(d<TOTAL_ELEMENTS)

   {}

else 

   {}

5 关于#pragma

向编译器提供一些信息,例如包含特定的函数库。

你可能感兴趣的:(编程,c,扩展,语言,编译器)