C语言的预处理指令

C语言在编译的第一个环境,通过调用预处理程序对源文件进行的处理,被称为预处理。
预处理主要是处理以#开头的命令,例如#include <stdio.h>等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面。这种以#号开头的命令称为预处理命令。

指令 说明
# 空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
#if 如果给定条件为真,则编译下面代码
#ifdef 如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个#if……#else条件编译块
#error 阻止程序编译

关于#include

1.#include 实质是什么?
预编译的时候copy include头文件的内容到当前行

2.#include “” 与<> 有何区别?
“”先在当前目录查找有无该头文件,有则包含该目录下的头文件,没有则到系统指定的目录下找该头文件
<>直接到系统指定的目录下查找该文件

3.重复#include时如何防止重复定义/声明?
方案一:
#pragma once
优点:不会出现宏名重复 缺点:某些老的编译器不支持

方案二:

#ifndef XXX

#define XXX

#endif   

优点:所以的编译器都支持 缺点:出现宏名重复

一般我们看到大多都是选择方案二,我们只要避免宏名重复就行了


关于宏定义

不带参数的宏定义

所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。

宏定义的一般形式为:#define 宏名 字符串

#include <stdio.h>
#define N 100
int main(){
    int sum = 20 + N;
    printf("%d\n", sum);
    return 0;
}

带参数的宏定义

带参宏定义的一般形式为:#define 宏名(形参列表) 字符串

#include <stdio.h>
#define MAX(a,b) (a>b) ? a : b
int main(){
    int x , y, max;
    printf("input two numbers: ");
    scanf("%d %d", &x, &y);
    max = MAX(x, y);
    printf("max=%d\n", max);
    return 0;
}

关于#error命令

//我们的程序针对Linux编写,不保证兼容Windows,那么可以如下形式编写代码
#ifdef WIN32
#error This programme cannot compile at Windows Platform
#endif
//我们的程序必须以C++方式编译,那么可以
#ifndef __cplusplus
#error 当前程序必须以C++方式编译
#endif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。