电子产业一站式赋能平台

PCB联盟网

搜索
查看: 146|回复: 0
收起左侧

C语言有哪些预处理操作?

[复制链接]

397

主题

397

帖子

2463

积分

三级会员

Rank: 3Rank: 3

积分
2463
发表于 2023-12-7 21:01:00 | 显示全部楼层 |阅读模式

r54n1j2zvsc6401887058.png

r54n1j2zvsc6401887058.png
- D( x' {/ Z( o# N

0 \, d3 y( I& [3 c' x) ~C语言的预处理是在编译之前对源代码进行处理的阶段,它主要由预处理器完成。预处理器是一个独立的程序,它负责对源代码进行一些文本替换和处理,生成经过预处理的代码。以下是C语言预处理的一些重要特性:
/ p% ?9 s: S: g& I$ Z1,头文件包含
  • #include 作用:将其他文件的内容包含到当前文件中。: m/ R# h, Y! w$ J8 b4 o8 u( {* ~8 j
    示例:#include指令用于包含标准库头文件,如上例中的 。
    6 c9 a0 w4 ?6 O6 R; i2 b

    $ I7 Q8 [6 `$ i8 }2,宏定义
  • #define PI 3.14159作用:创建宏,用指定的文本替换源代码中的标识符。- Q! x8 D; V* a" B1 |
    示例:上例中PI将在源代码中被替换为3.14159。4 C" v$ }  w# v2 o5 d' F8 X# N

    0 ?: L! G( f7 j1 v& Z; W; P3,条件编译
  • #ifdef DEBUG// 调试模式下的代码#endif作用:根据条件选择性地编译代码。
    % w1 h8 `3 d3 K7 W  v示例:定义了DEBUG宏,#ifdef DEBUG和#endif之间的将被编译。
    ) s9 j3 ]# Q% {- }7 x
    ; Q. l: L0 |5 f! f( W
    4,条件包含
  • #if SIZE == 64    #include "header64.h"#else    #include "header32.h"#endif作用:根据条件选择性地包含头文件。
    6 L5 F& q/ g1 {  o) p1 Q1 m示例:定义了SIZE为64,则包含header64.h,否则包含header32.h。
    + J5 ~, [9 T& R$ D" t; i

    . Y2 l3 u" z; `" L. S& y" P) O5,标识符连接
  • #define CONCAT(x, y) x ## yint result = CONCAT(10, 20); // 相当于 int result = 1020;作用:将两个标识符连接为一个标识符。2 Z8 S1 _* i2 t# n) e
    示例:上例中CONCAT(10, 20)被连接为1020。
    2 Y) l  O4 q; E: o  ]5 d
    # p% q( P1 W2 k  c' K
    6,条件编译中的宏定义
  • #if defined(DEBUG) && (LOG_LEVEL > 1)    // 在调试模式且日志级别大于1时执行的代码#endif作用:在条件编译中使用宏定义进行更复杂的条件判断。: y& F2 ?% x* {7 V
    示例:上例中,当定义了DEBUG宏并且LOG_LEVEL大于1时,才会编译对应的代码块。9 k6 B6 B% a5 A6 O5 |9 ~( D

    ' `6 e( o* t9 P- G6 `7,#undef 指令
  • #undef PI#define PI 3.1415926535作用:取消已定义的宏,然后重新定义。$ H6 \: a: q4 J3 ^
    示例:上例中,取消了之前定义的PI宏,然后重新定义为更精确的值。
    7 z+ Y( h) I5 O- w

    1 X# O  l2 Q2 A, @8,#error 指令
  • #if !defined(CONFIG)    #error "CONFIG macro is not defined!"#endif作用:在编译过程中产生错误消息。
    7 H/ E( {' r. k; d! f示例:如果CONFIG宏没有被定义,将产生编译错误并显示错误消息。* R" Y0 R& \% [5 Y$ p5 Q" k+ k
    ==========+ u' M4 `3 m& T$ T. K1 j2 G
    往期回顾:面试题--函数指针的五大作用
      ?% `+ S, j' k& C* x, C. F中值滤波的原理和C代码! q- ]2 t. h4 v4 S: P# [
    移动平均滤波的原理和C代码
    " H" V0 f5 E0 K; [; ?MOS管防反接电路# z; }  p; y$ Z- v9 v( l6 @
    ==========
    9 r' R1 v- n7 [8 r1 k/ s
    7 b6 E! T, m+ u, D

    zlph3gtyzzq6401887158.png

    zlph3gtyzzq6401887158.png

    4 D7 g6 |# I! U( A9 w
    1 \! X2 f5 \$ f: E; _4 k

    pdegootuaja6401887258.png

    pdegootuaja6401887258.png
    " ]8 s' O) e& J# ]+ N8 T0 V

    ( P7 H7 v8 \% T' C: I! x

    1ubsewtvw3x6401887359.png

    1ubsewtvw3x6401887359.png
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表