C语言基础(十)

编译预处理命令:

预编译命令在C语言中用于在编译前进行一些特定的处理和控制,帮助程序员更灵活地管理源代码和控制编译过程。

C语言常用的预编译命令:

#include:用于包含头文件,将另一个文件的内容插入到当前文件中。

#include 可以将头文件中的声明、定义等内容导入到当前源文件中,从而使得程序中可以使用头文件中定义的函数、变量等。
使用尖括号(< >)包含文件用于包含系统或全局范围的头文件,这些头文件通常存储在系统目录的标准库中。

使用双引号(" ")包含文件用于包含用户定义的头文件,这些头文件通常在当前项目的目录中或者特定的包含路径中。

......................................................................................................................................................... 

#define和#undef:用于定义和取消宏。 编译时,预处理器会将程序中出现的宏名替换为宏定义中的内容。

#ifdef、#ifndef、#else和#endif:用于条件编译,根据条件选择性地包含代码。

#ifdef 指令用于判断一个宏是否已经定义,如果定义了,则编译后面的代码段。

语法为:

#ifdef MACRO_NAME
    // Code to be compiled if MACRO_NAME is defined
#endif

#ifndef 和 #else 是 C 语言中的预处理指令,用于条件编译。通常与 #ifdef 一起使用,可以让程序根据宏的定义情况选择性地编译代码段。

#ifndef:#ifndef 指令和 #ifdef 相反,用于判断一个宏是否未定义,如果未定义,则编译下面的代码段。

语法为:

#ifndef MACRO_NAME
    // Code to be compiled if MACRO_NAME is not defined
#endif

当宏 MACRO_NAME 未被定义时,编译器会编译 #ifndef 到 #endif 之间的代码。

#else:#else 指令用于在 #ifdef 或 #ifndef 的条件不成立时执行备选代码段。

语法为:

#ifdef MACRO_NAME
    // Code to be compiled if MACRO_NAME is defined
#else
    // Code to be compiled if MACRO_NAME is not defined
#endif

如果 MACRO_NAME 宏已经定义,则编译 #ifdef 到 #else 之间的代码;否则编译 #else 到 #endif 之间的代码。
通过结合使用 #ifndef 和 #else 可以更灵活地根据宏的定义情况选择性地编译不同的代码段,实现条件编译的效果。

.......................................................................................................................................................... 

#pragma:用于向编译器发送特定的指令。

#error:用于生成编译错误信息。

#line:用于修改行号和文件名信息。

#if、#elif和#else:用条件编译,根据条件选择性地包含代码。

#warning:用于生成编译警告信息。

#pragma pack:用于在编译时设置内存对齐方式。通过 #pragma pack(n) 可以指定结构体、联合体或类的成员变量按照 n 字节对齐。该指令可以有效减小结构体大小,节省内存空间,但是对齐方式不当可能导致性能问题或者其他错误。通常在需要与外部系统或硬件进行数据交互时使用。

#pragma warning:用于控制编译警告的输出。

#LINE、FILE、DATE、__TIME__等预定义宏:用于获取编译时的行号、文件名、日期、时间等信息。

1、宏定义:

测试代码:

//无参数的宏定义:用一个标识符(宏名)来代表一个字符串(宏体)。
//在预处理阶段,预处理器会将所有的宏名替换为它们对应的宏体。
//格式:#define 宏名 替换文本

//带参数的宏定义: 有参数的宏定义允许宏像函数一样接受参数,并在宏体内使用这些参数。
//格式:#define 宏名(参数列表) 替换文本 

#define VERSION "1.2.3" // 定义了一个无参数的宏,用于表示软件版本号  
//有参宏定义,宏的每个参数在宏定义体内用圆括号将参数括起来,宏体也用圆括号括起来,避免因运算符优先级导致的错误。 
#define MAX(a, b) ((a) > (b) ? (a) : (b)) // 定义了一个带参数的宏,用于计算两个数中的最大值  
#include <stdio.h>  // 引入标准输入输出库  
  
int main() {    
    // 打印软件版本号  
   printf("当前软件版本:%s\n", VERSION);  
    // 使用MAX宏计算两个数的最大值  
   int x = 5, y = 10;    
   int max_value = MAX(x, y);  
   printf("x和y中较大的数是:%d\n", max_value); 
    // 在printf中使用MAX宏  
   printf("x和3的较大数是:%d\n", MAX(x, 3)); 
   return 0;    
}

运行结果如下:

....................................................................................................................................................... 

2、条件编译:

 创建一个funtion.h头文件:

#ifndef Fun
#define Fun

// 声明void类型的函数sayHello,无参数
void sayHello();

// 声明void类型的函数subtraction,有两个int类型的参数a和b
void subtraction(int a, int b);

// 声明int类型的函数adds,无参数
int adds();

// 声明char类型的函数addition,有两个int类型的参数a和b
char addition( int a,int b);

// 声明单词统计函数
void countAndPrintWords(char str[]); 

#endif

创建一个 implementfunction.h头文件:

#ifndef FunIm 
#define FunIm 
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

// 实现funtion.h中声明的函数

// 定义sayHello函数
void sayHello() {
    printf("Hello, World!\n");
}

// 定义subtraction函数
void subtraction(int a, int b) {
    int multiplication = a * b;
    printf("The sum of %d and %d is %d\n", a, b, multiplication);
}

// 定义adds函数
int adds() {
    return 10 + 20;
}

// 定义addition函数
char addition(int a, int b) {
  return (char)a + b;
}

//定义单词统计函数
void countAndPrintWords(char *str) {
    bool inWord = false;
    int wordCount = 0;

    // 循环遍历字符
    while (*str) {
        // 如果当前字符是字母或数字,表示在单词中
        if (isalnum(*str)) {
            if (!inWord) {
                inWord = true;
                wordCount++;
                printf("Word %d: ", wordCount);
            }
            printf("%c", *str);
        } else {
            if (inWord) {
                inWord = false;
                printf("\n");
            }
        }
        // 移动到下一个字符
        str++;
    }

    if (inWord) {
        printf("\n");
    }

    printf("Total words: %d\n", wordCount);
}
#endif

在main()函数中调用:

#include "funtion.h"//自定义的头文件用"" 
#include "implementfunction.h"//自定义的头文件用"" 

int main() {
	sayHello();
    subtraction(99, 5);
    int c = adds();
    char result = addition(81,5);
    
    printf("result = %d\n", result);  // 输出结果 
    printf("%c\n", result);
    printf("%d\n", c);  // 输出整数值
    char str[] = "This directive can help reduce the size of a structure, saving memory space, "
            "is important to be cautious as improper alignment may lead to performance issues "
            "or external systems or hardware.";
    countAndPrintWords(str);
    return 0;
   }
    

运行结果如下:

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值