#pragma,#include,#define,#ifdef,#error,#undef,#ifndef,#if,#elif,#else,#endif,#warning,#line的详细用法

标题用人话说就是预处理指令

1.空指令

先水一个

#

对,就这一个,没有任何作用

2.#include

注意所有预处理指令没有;

#include <header>     // 系统头文件
#include "file.h"     // 用户头文件

引用系统头文件或用户头文件,会第一个就行(第二个没用)

3.#define宏定义

(1)定义标识符

#define+名称+代替的东西(也可以没有)

下次using namespace std;

可以写成 INDEFINE namespace std;了

#define IDENTIFIER         // 定义标识符
#define INDEFINE using

也可以指代数字或算式

#define LING 0
#define YEH 1+2

怎么用?

#include<bits/stdc++.h>
#define SDS 3+4
int main(){
    int a=SDS;
    printf("%d",a);
    return 0;
}

输出7

(2)带参数的宏

约等于函数

#include<bits/stdc++.h>
#define DF(a) a+3
int main(){
    int b=6;
    std::cout<<DF(b);
    return 0;
}

输出 9

(3)defined()

有个小函数defined(),判断宏是否被定义

4.#undef

#undef+已经定义过的宏名称,表示取消宏定义

人话:把它删了

#undef IDENTIFIER          // 取消宏定义

5.#line行控制指令

先写个好写的,一点也不常用,直接看示例吧

#line number "filename"  // 设置行号和文件名
// 常用于代码生成工具

6.#pragma

唯一真神,开O3或O2优化后就不TLE了(代码看A+B600多行的那篇)

还有这些作用

#pragma once               // 防止头文件重复包含
#pragma pack(n)            // 设置结构体对齐
#pragma warning(...)       // 控制警告(MSVC)
#pragma GCC optimize(...)  // 优化设置(GCC)
#pragma clang diagnostic... // 诊断控制(Clang)

其实还能当错误和警告指令用(后面会讲)

7.条件编译指令

可以放在函数或主函数中

#ifdef IDENTIFIER          // 如果已定义
#ifndef IDENTIFIER         // 如果未定义
#if constant_expression    // 如果条件为真
#elif constant_expression  // 否则如果
#else                     // 否则
#endif                    // 结束条件编译

作用:检查宏是否已定义

#include <iostream>

// 检查宏是否已定义的不同方式

#define FEATURE_X

int main() {
    // 方式1:使用 #ifdef
#ifdef FEATURE_X
    std::cout << "FEATURE_X 已定义(使用 #ifdef)" << std::endl;
#endif

    // 方式2:使用 #if defined()
#if defined(FEATURE_X)
    std::cout << "FEATURE_X 已定义(使用 #if defined())" << std::endl;
#endif

    // 检查多个条件
#if defined(FEATURE_X) && !defined(DISABLE_FEATURE)
    std::cout << "功能X启用且未被禁用" << std::endl;
#endif

    return 0;
}

#if,#elif,#else几乎可以当if else   if else用,只不过要跟宏有关,并且需要#endif

8.错误与警告指令

#error message      // 产生编译错误
#pragma message("msg")  // 输出编译消息(MSVC)
#warning message    // 产生编译警告(GCC/Clang)

也没啥用,知道就行

9.预定义宏 

不用定义,直接用即可

__LINE__      // 当前行号
__FILE__      // 文件名
__DATE__      // 编译日期
__TIME__      // 编译时间
__cplusplus   // C++标准版本
__func__      // 当前函数名(C++11)
__VA_ARGS__   // 可变参数宏

再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值