C/C++ 中的宏使用笔记(MARCO)

本文详细介绍了C/C++中的宏定义及预处理指令,包括#include、#define、#undef、条件编译等,并展示了宏的常用功能如#define MAX(a,b)、宏置换(#)和宏拼接(##)等。还提到了预定义宏,如__LINE__、__FILE__等,以及如何进行条件编译和使用#pragma指令。同时,文章给出了C风格的代码组织和编译器特性判断的例子。
摘要由CSDN通过智能技术生成

C/C++ 中的宏使用笔记(MARCO)

宏指令

宏指令宏解释
#include引用头文件
#define定义宏
#undef取消宏定义
#ifndef假如没有定义 等价于 #if !defined(<MARCO>)
#ifdef假如定义 等价于 #if defined(<MARCO>)
#else否则
#elif否则假如
#endifif或else的结束
#pragma编译指示

预定义宏

预定义宏解释
__LINE__当前编译的代码的行号
__FILE__当前编译文件的源文件名
__DATE__当前源程序创建的日期
__TIME__当前源程序创建的时间
__STDC__c++17 判断当前的编译器是否为标准C编译器,若是则返回值1
__STDC__HOSTED__c++11 是否托管环境
__STDC_VERSION__c++11 C 标准的版本号
__OBJC__c++11 是否Objective-C 编译器
__ASSEMBLER__c++11 预处理汇编语言时定义为值 1

更多的预定义宏参考链接:

https://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html
http://www.cppblog.com/bellgrade/archive/2010/03/18/110030.html

常见用法

定义宏

#define MARCO

定义宏为一个值

#define MARCO 123

定义宏为一个函数

#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b))

宏置换(#)

我的编译器测试不同过,可能不管用

#define PRINTFX(YYDX)          \
    do                      \
    {                       \
        printf("#YYDX:%s\n", YYDX); \
    } while (0)

宏拼接(##)

#define NAME(a,b) a##b

C风格编译

#ifdef  __cplusplus
extern "C" {
#endif
// <代码段>
#ifdef  __cplusplus
}
#endif

条件编译

#if defined(__STDC__) && (__STDC__ >= 1)
// <代码段>
#endif /* __STDC__ >= 1 */

选择性编译

#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \
    ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \
    !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK)
// <代码段1>
#else
// <代码段2>
#endif /* gcc >= 4.3 && !__cplusplus */

编译一次

#ifndef __STL_MARCO_H__
#define __STL_MARCO_H__
// <代码段>
#endif /* __STL_MARCO_H__ */
#pragma once

pragma

#pragma pack(1)
#pragma pack(push, 8)
#pragma pack(pop)
#pragma warning(push)
#pragma warning(pop)
#pragma warning(disable:4996)
#pragma warning(disable:4251)

#ifdef __clang__
#pragma clang diagnostic pop
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值