peterjade

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

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

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-04-11
  • 2021-11-17
  • 2021-11-27
  • 2021-06-11
  • 2021-12-16
  • 2022-12-23
猜你喜欢
  • 2021-11-17
  • 2021-12-26
  • 2021-11-17
  • 2022-01-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案