关于C的预编译 宏定义 的一些使用[不断积累中]

2023-11-18

头文件 防止重复包含

================

根据#define 和条件编译 #ifdef、#ifndef #else #endif  最经常的使用是 头文件 防止重复包含。

但是 使用

#pragma  once

更好,现在 gcc cl.exe 都支持,它不但代码更少,而且不用为宏起名字,更好。

 #pragma 说明编译器信息//用法复杂,参考http://baike.baidu.com/view/1451188.htm

#warning 显示编译警告信息

#error 显示编译错误信息

可以在这些条件编译中 给出某条件下的 提醒。比如 要求定义的宏没有定义,就#error,停止编译。

 

条件编译 中的多个条件,多个宏同时判断

====================

还有 条件编译中 ,比如 同时判断俩条件的

#ifdef ( a && b)该怎么写呢?如果是ifdef 或者 ifndef 就不能这么写了。

得用#if (a==1 && b==2)这种写法了。试着去掉 #define b 2,条件里面的 编译信息 和 输出 就不会显示了。

#include <stdio.h>
#include <iostream>

using namespace std;

int main(int argc,char **argv){

        cout<<"main"<<endl;
    #define a 1
    #define b 2
//    #ifdef a  && #ifdef b
    #if (a==1 && b==2 )
        #pragma   message("\npragma message  YES Defined a b\n")
        cout<<"YES Defined a and b??"<<endl;
    #endif
    return 0;
}

 刚发现 ifdef也是可以多个条件的:

类似:#if defined _DEBUG || defined VLD_FORCE_ENABLE

//刚从boost-jam-3.1.18 的源码(sf.net链接)中的pwd.c 中看到的,积累下。
//看来cl貌似还定义了 NT 变量,GNU GCC定义了 __GNUC__

/* MinGW on windows declares PATH_MAX in limits.h */
#if defined(NT) && ! defined(__GNUC__)
    #include <direct.h>
    #define PATH_MAX _MAX_PATH
#else
    #include <unistd.h>
    #if defined(__COMO__)
         #include <linux/limits.h>
    #endif
#endif

 

 

 

VLD是一个 检测 内存泄漏的编程工具包。值得推荐!以前遇到段错误,或者内存没有合理的释放掉的情况,也不知道该怎么办。用这个 好点。段错误 貌似 无法有效的检测呢。。野指针!

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于C的预编译 宏定义 的一些使用[不断积累中] 的相关文章

  • window系统消失的c盘,实际占用与显示占用相差好多G

    问题 C盘一直显示的红色提醒 我c盘实际占用的空间只有33 1GB 而我的c盘总共大小是59 9GB 显示的剩余大小是1 35GB 也就是说我占用了58 11 和c盘的总文件大小相差了25GB 那么消失的25GB去了哪里 我百度过这个问题
  • Java课程设计之学习成绩管理系统

    package System import java awt import java awt event import java io import javax swing import javax swing table Abstract
  • fork之后子进程到底复制了父进程什么

    fork之后子进程到底复制了父进程什么 发表于2015 4 3 9 54 08 2161人阅读 分类 操作系统 include
  • plsql更改用户登录密码

    ORACLE数据库系统是美国ORACLE公司 甲骨文 提供的以分布式数据库为核心的一组软件产品 是目前最流行的客户 服务器 CLIENT SERVER 或B S体系结构的数据库之一 比如SilverStream就是基于数据库的一种中间件 O
  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • MySQL基础(非常全)

    MySQL基础 一 MySQL概述 1 什么是数据库 答 数据的仓库 如 在ATM的示例中我们创建了一个 db 目录 称其为数据库 2 什么是 MySQL Oracle SQLite Access MS SQL Server等 答 他们均是
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • ps aux 和ps -aux和 ps -ef的选择

    Linux中的ps命令是Process Status的缩写 ps命令用来列出系统中当前运行的那些进程 ps命令列出的是当前那些进程的快照 就是执行ps命令的那个时刻的那些进程 如果想要动态的显示进程信息 就可以使用top命令 要对进程进行监
  • 设备管理过程

    复杂度2 5 机密度2 5 最后更新2021 04 19 AIX中对设备会有如下五个操作 define aix下能看到设备的定义 但驱动程序并没有加载或初始化 该设备不可用 lsdev看到设备时defined 很多逻辑设备 vg lv等 只
  • 操作系统PV操作及读者写者问题

    操作系统PV操作及读者写者问题 目录 1 信号量 2 P V操作原语可描述为以下式子 3 解释 4 互斥模式原理 5 同步模式原理 6 读者写者问题 1 信号量 PV操作与信号量的处理有关 信号量是表示资源的实体 是一个与队列有关的整型变量
  • Java堆的自动垂直缩放

    多年以来 java一直是贪婪的应用程序的同义词 这种类型的应用程序在晚上打开冰箱并吞噬所有可用资源 直到崩溃 该行为的主要原因是缺乏一种有效的方式来将操作系统在Java堆中分配且不再使用的内存交还给操作系统 However with the
  • InfoQ视频直播分享报名:前贝尔实验室、Oracle架构师为你在线揭秘分布式平台内核...

    报名方式 关注InfoQ微信公众号 ID infoqchina 回复 InfoQ 即可观看在线直播技术分享 分享地点 u0026amp 时间 InfoQ直播微课堂将在熊猫 TV 网站播出 看腻了卖肉的女主播 来看看QCon 的明星讲师如何
  • 03LinuxC线程学习之线程共享和非共享

    1 线程共享和非共享 1 1 线程共享资源 1 文件描述符表 由于线程间共享进程间的内容 而文件描述符表在主线程的PCB当中 各个线程可以直接去请求访问 所以线程间通信就不需要像进程那样通过管道这些方式通信 2 每种信号的处理方式 即当某个
  • Linux alien命令

    一 简介 alien是一个用于在各种不同的Linux包格式相互转换的工具 其最常见的用法是将 rpm转换成 deb 或者反过来 二 安装 http toutiao com a6188997768449360129 三 实例 http www
  • Ubuntu9.04太多乱码(中文不能正常显示)

    最近在使用Ubuntu9 04的过程中 发现有好多地方都出现乱码 其实是中文不能正常显示 现在把我所遇到的所有乱码问题集中一下 方便以后查阅参考 一 Flash乱码 在终端输入 sudo gedit etc fonts conf d 49
  • linux 使用systemctl 启动服务报错: Error: No space left on device

    By default Linux only allocates 8192 watches for inotify which is ridiculously low And when it runs out the error is als
  • java IO、NIO、AIO详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 sy
  • 磁盘调度算法笔记和练习题

    磁盘调度算法 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 练习题 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 它是一次只响应一个方向上的请求 这个方向上的请求都响应完了 再掉头处理另一个方向上的 有点
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process
  • 地址映射与共享

    跟踪地址映射过程 1 通过命令 dbg asm启动调试器 在linux 0 11运行test c文件 使其进入死循环 我们的任务就是找到i的地址并将其修改为0使test c程序退出循环 2 在命令行输入crit c使Boch暂停 一般会显示

随机推荐

  • [转]基于TDOA声源定位算法仿真--MATLAB仿真

    转自 http t cn AiTjYCqD 关注微信公众号 通信小课堂 获取专业小知识 声源定位算法是利用麦克风阵列进行声音定位 属于宽带信号 传统的MUSIC和DOA算法并不适用该场景 本仿真主要用TDOA算法进行定位 常用的阵列信号定位
  • 深入MySQL查询过程底层原理,我找到了MySQL查询慢的根本原因!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 前言 接上一节 那么 一次查询的全过程是什么样的呢 这个时候 我们通过各种百度和Google 然后加上自己的理解 终于搞明白了MySQL一次查询的全过程了 首先 用户
  • MySQL 报错: Subquery returns more than 1 row

    MySQL 报错 Subquery returns more than 1 row 查询 demo SET tableNameList SELECT id FROM tableName 查询多条记录 SET tableNameList SE
  • Seata: 运行nacos-config.sh报Please check the cluster status的总结

    一 看所在的机器是否安装了curl并正常工作 二 检查nacos是否能正常访问 三 看如下命令结果是否异常 根据实际情况调整nacos地址 curl X POST http 127 0 0 1 8848 nacos v1 cs config
  • 27 openEuler管理网络-通过ifcfg文件配置网络

    文章目录 27 openEuler管理网络 通过ifcfg文件配置网络 27 1 配置静态网络 27 2 配置动态网络 27 3 配置默认网关 27 openEuler管理网络 通过ifcfg文件配置网络 说明 通过ifcfg文件配置的网络
  • MySQL-mysql 8.0.11安装教程

    转载 https www cnblogs com laumians notes p 9069498 html 另外在奉上我自己搜索到的两个mysql安装网站 1 https dev mysql com doc refman 8 0 en d
  • G - Five-In-a-Row

    B Five In a Row time limit per test 1 second memory limit per test 256 megabytes input standard input output standard ou
  • 好长时间不看,php魔术变量又忘了,赶紧总结下

    看到了wordpress的这行代码想起来的 define WP USE THEMES true Loads the WordPress Environment and Template require dirname FILE wp blo
  • AsyncTask源码梳理及总结

    结合Android 7 0源码 全面解析AsyncTask的源码 梳理AsyncTask使用过程中的一些注意事项 分析源码之前 我们先来梳理一下使用 AsyncTask使用示例 public class MainActivity exten
  • VS Code-此时不应有 &

    描述 用vs code运行python代码时 报 此时不应有 解决方式 ctrl 调出终端 将默认终端设置成powershell 退出 重新加载代码
  • 《七天数据埋点之旅》第一天:初识埋点

    0x00 前言 本篇为 七天数据埋点之旅 的第一篇 通过阅读本篇 你将获得以下三方面的知识 什么是埋点 埋点的用途 埋点的分类 0x01 什么是埋点 数据埋点是数据采集的一种重要方式 主要用来记录和收集终端用户的操作行为 其基本原理是在Ap
  • 1.3端口扫描:利用Nmap工具进行端口扫描

    1 预备知识 Nmap介绍 nmap的功能 端口扫描 主机发现 服务 版本识别 操作系统识别 网络路由跟踪 Nmap脚本引擎 nmap的扫描方式 Half open scanning 默认扫描方式 TCP connect TCP ACK s
  • 正则匹配微信昵称

    x 4e00 x 9fa5 a zA Z0 9 2 32 u x 1F600 x 1F64F x 1F300 x 1F5FF x 1F680 x 1F6FF x 2600 x 26FF x 2700 x 27BF u
  • PHP使用PhpSpreadsheet库的操作Excel表格

    一 PhpSpreadsheet 介绍 PhpSpreadsheet是一个用纯PHP编写的库 提供了一组类 使您可以读取和写入不同的电子表格文件格式 PhpSpreadsheet提供了丰富的API接口 可以设置诸多单元格以及文档属性 包括样
  • 全国通用DNS服务器

    全国各地电信铁通DNS服务器地址 北京 202 96 199 133 202 96 0 133 202 106 0 20 202 106 148 1 202 97 16 195上海 202 96 199 132 202 96 199 133
  • JavaSE面试总结

    网络 反射 网络 OSI 的七层模型都有哪些 TCP与UDP区别 什么是三次握手四次挥手 socket编程 time wait状态如何产生 tcp为什么要三次握手 TCP如何保证可靠传输 什么是 TCP 粘包 它的产生原因以及解决方法 TC
  • 微信小程序 顶部自定义导航 “navigationStyle“: “custom“ 真机iPhone6/7/8不显示胶囊按钮

    微信小程序 顶部自定义导航 navigationStyle custom 要实现这种效果图 1 在哪个页面上实现自定义导航栏就在哪个页面的 json 文件中写上 navigationStyle custom 如果在app json写那就是所
  • 30多岁挨踢人要转行的焦虑,是真的吗

    30多岁挨踢人要转行的焦虑 是真的吗 从菜鸟到高级都在焦虑的一个问题 到了30多岁还没有做出点成就的话 就只能转行了 诸如做管理 创业开饭馆等等 我一直对此观点持保留态度 粗略看国内挨踢的发展历程 2000年出现第一次泡沫 往前推的话 有规
  • 2023,DaaS驶入“AI大航海时代”

    2023 制胜 已然成为所有行业 企业的共同命题 随着数字化行至中程 数据壁垒逐渐被打破 DaaS作为企业增长问题的解法 再次被看到 作者 斗斗 编辑 皮爷 出品 产业家 2002年 在竞争激烈的美国职业棒球联盟 奥克兰运动家队无论在人员和
  • 关于C的预编译 宏定义 的一些使用[不断积累中]

    头文件 防止重复包含 根据 define 和条件编译 ifdef ifndef else endif 最经常的使用是 头文件 防止重复包含 但是 使用 pragma once 更好 现在 gcc cl exe 都支持 它不但代码更少 而且不