亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 预处理器和宏

C 预处理器和宏

本教程将向您介绍c预处理器,并通过示例学习#include、#define和条件编译的使用。

<图>

C 预处理器是一个宏预处理器(允许您定义宏),它可以在程序编译之前对其进行转换。这些转换可以是包含头文件、宏扩展等。

所有预处理指令都以 # 开头 象征。例如,

#define PI 3.14

C预处理器的一些常见用途是:


包含头文件:#include

#include 预处理器用于将头文件包含到 C 程序中。例如,

#include <stdio.h>

这里,stdio.h 是一个头文件。 #include 预处理器指令将上述行替换为 stdio.h 的内容 头文件。

这就是你需要使用 #include <stdio.h> 的原因 在你可以使用像 scanf() 这样的函数之前 和 printf() .

您还可以创建自己的包含函数声明的头文件,并使用此预处理器指令将其包含在您的程序中。

#include "my_header.h"

访问此页面以了解有关使用头文件的更多信息。


使用#define的宏

宏是指定名称的代码片段。您可以使用 #define 在 C 中定义宏 预处理指令。

这是一个例子。

#define c 299792458  // speed of light

在这里,当我们使用 c 在我们的程序中,它被替换为 299792458 .


示例 1:#define 预处理器

#include <stdio.h>
#define PI 3.1415

int main()
{
    float radius, area;
    printf("Enter the radius: ");
    scanf("%f", &radius);

    // Notice, the use of PI
    area = PI*radius*radius;

    printf("Area=%.2f",area);
    return 0;
}

类似宏的功能

您还可以定义以类似于函数调用的方式工作的宏。这被称为类函数宏。例如,

#define circleArea(r) (3.1415*(r)*(r))

每次程序遇到circleArea(argument) ,它被替换为 (3.1415*(argument)*(argument)) .

假设我们传递了 5 作为参数,那么它的展开如下:

circleArea(5) expands to (3.1415*5*5)

示例2:使用#define预处理器

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI*r*r)

int main() {
    float radius, area;

    printf("Enter the radius: ");
    scanf("%f", &radius);
    area = circleArea(radius);
    printf("Area = %.2f", area);

    return 0;
}

访问此页面以了解有关宏和#define 预处理器的更多信息。


条件编译

在 C 编程中,您可以指示预处理器是否包含代码块。为此,可以使用条件指令。

它类似于 if 声明有一个主要区别。

if 在执行期间对语句进行测试以检查是否应该执行代码块,而条件用于在执行之前在程序中包含(或跳过)代码块。


条件句的使用


如何使用条件?

要使用条件,#ifdef , #if , #defined , #else#elif 使用了指令。


#ifdef 指令

#ifdef MACRO     
   // conditional codes
#endif

此处,仅当 MACRO 时,条件代码才包含在程序中 已定义。


#if、#elif 和 #else 指令

#if expression
   // conditional codes
#endif

这里,表达式 是整数类型的表达式(可以是整数、字符、算术表达式、宏等)。

仅当 表达式 时,条件代码才会包含在程序中 被评估为非零值。

可选的 #else 指令可以与 #if 一起使用 指令。

#if expression
   conditional codes if expression is non-zero
#else
   conditional if expression is 0
#endif

您还可以将嵌套条件添加到您的 #if...#else 使用 #elif

#if expression
    // conditional codes if expression is non-zero
#elif expression1
    // conditional codes if expression is non-zero
#elif expression2
    // conditional codes if expression is non-zero
#else
    // conditional if all expressions are 0
#endif

#定义

特殊运算符 #defined 用于测试是否定义了某个宏。它经常与 #if 一起使用 指令。

#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
  // codes

预定义宏

以下是 C 编程中的一些预定义宏。

__DATE__ 包含当前日期的字符串
__FILE__ 包含文件名的字符串
__LINE__ 表示当前行号的整数
__STDC__ 如果遵循 ANSI 标准 C,则该值为非零整数
__TIME__ 包含当前日期的字符串。

示例3:使用__TIME__获取当前时间

以下程序使用 __TIME__ 输出当前时间 宏。

#include <stdio.h>
int main()
{
   printf("Current time: %s",__TIME__);   
}

输出

Current time: 19:54:39

推荐读物


C语言

  1. R、L 和 C 摘要
  2. C# 关键字和标识符
  3. C# 类和对象
  4. C#抽象类和方法
  5. C# 部分类和部分方法
  6. C# 密封类和方法
  7. C# 预处理器指令
  8. C 关键字和标识符
  9. C - 常量和文字
  10. C - 输入和输出
  11. C - 预处理器
  12. C++ 日期和时间