当前位置: 首页 > 编程日记 > 正文

#pragma once与#ifndef

在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性的两种方法。

#ifndef

它不光可以保证同一份文件不会被包含两次,也能够保证不同文件完全相同的内容不会被包含两次。但,同样的,如果自定义的宏名不小心“重名”了,两份不同的文件使用同一个宏名进行#ifndef,那么会导致编译器找不到声明的情况(被编译器判定为重定义而屏蔽了)。

此外,由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式(Visual Studio 2015新建头文件会自带#pragma once指令)。

#ifndef #define   //code  #endif  

#pragma once

一般来说由编译器提供,是一个非标准但被广泛支持的方式(有些编译器不支持)

好处:操作简单,效率高

缺点:没有#ifndef灵活,兼容(#ifndef不受编译器的限制)

转载于:https://www.cnblogs.com/elong1995/p/10955524.html

相关文章:

grep 在HP-UX下的递归查找

grep 在HP-UX下的递归查找Linux: man grep 可以看到 -r 选项-R, -r, --recursiveRead all files under each directory, recursively; this is equivalent to the -d recurse option.即:-r 选项可以查找指定目录下每个子目录下的所有文件eg:grep -r "28281&quo…

Java项目:实现个人博客系统(java+springboot+mybatis+redis+vue+elementui+Mysql)

源码获取:博客首页 "资源" 里下载! springbootmybatis前端vue,使用前后端分离架构实现的个人博客系统,共7个模块,首页,写博客,博客详情页,评论管理,文章分类&a…

软件工程--总作业(已经完成)

用户调研:http://www.cnblogs.com/OuZeBo/p/4580146.htmlalpha阶段总结:http://www.cnblogs.com/OuZeBo/p/4580146.html对其他组评价的反馈:已评论其他组,暂时没有其他组对我们组进行评论描述项目的典型用户与场景:已完…

linux各文件夹的作用域

目錄應放置檔案內容/bin系統有很多放置執行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指…

LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理

题目:https://loj.ac/problem/2721 1.注意别一输入 p[ i ] 就 a[ i ] % p[ i ] ,因为在 multiset 里找的时候还需要真实值。 2.注意用 multiset 。并且,因为要 upper_bound( a[ i ] ) ,而 a[ i ] 是一个 long long 类型的&#xf…

setuid和setgid

setuid 和 setgid (全称分别是:set user ID upon execution 和 set group ID upon execution)是Unix的访问权限标志位,它允许 用户以可执行文件owner或group的权限来运行这个可执行文件。它们经常适用于:为了运行特定的任务,可以允…

Java项目:宠物医院预约挂号系统(java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql)

源码获取:博客首页 "资源" 里下载! 一、项目简述功能包括: 用户分为宠物,医生,管理员,宠物主人可进行注册选择医生挂号,选择日期,选择号源,医生可进行宠物接诊…

大智慧面试经验

15-06-18下午1点,大智慧面试; 面试题全英文,第一部分基础的,诸如echo print printf的区别,include与require的区别等; 第二部分细节方面的,如在string中\n的意义,ucwords函数&#x…

Android 获取apk签名的fingerprint

为什么80%的码农都做不了架构师?>>> 假定安装了JDK,如果想查HelloWorld.apk所使用的签名的fingerprint,可以这样做:1. 查找apk里的rsa文件 (Windows) > jar tf HelloWorld.apk |findstr RSA…

Dinic二分图匹配 || Luogu P3386

题面:【模板】二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为NM1和NM2 然后S去和N中的数建正边和反边,正边权值为1,反边权…

shell中引号的使用方法

1. shell使用引号(单引号/双引号)和反斜线("\")用于向shell解释器屏蔽一些特殊字符. 反引号[h2] 对shell则有特殊意义. 1.1 单引号和反斜线 [h1] 可以阻止shell代入变量的值; 1.2 双引号不能阻止代入 例如: sles10i32-1:han$ personha…

Java学习笔记(二)不定时更新

Java语言画图 package cn.witksy.dev;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;/*** Author: Alfred* Created: 2015/5/7*/ public class Main {public void run() {Buffered…

Java项目:前台后台玩具商城系统(java+JSP+SSM+Springboot+Jsp+maven+Mysql)

源码获取:博客首页 "资源" 里下载! 一、项目简述本系统主要实现的功能有: 网上商城系统,前台后台管理,用户注册,登录,商品展示,分组展示,搜索,收货…

Tempdb数据库详细介绍

Tempdb数据库详细介绍一、Tempdb简介tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象。可以简单理解tempdb是SQLServer的速写板。应用程序与数据库都可以使用tempdb作为临时的数据存储区。一个实例的所有用户都共享一个Tempdb。很明…

java——逻辑运算符与(和)或(|和||)

区别: 1意思不同: &&是“与”的意思,||是“或者”的意思。 2 使用上不同:a && b:a和b同时为true 才返回 true, 否则返回false;a || b:a或b任意一个为true 就返回tru…

UTRAN 的用户面和控制面

UTRAN接口的通用协议模型如下图: 通俗地讲,通讯网络由终端(terminal)、连接(links)、网络节点(nodes)组成, links将nodes 关联起来。源终端(MO)发送的消息是怎样才能到目的终端(MT)呢? 消息经过links 和nodes,直至到达MT,其中关键是nodes怎么…

Java项目:疫情人员流动管理系统(java+JSP+SSM+Springboot+maven+Mysql)

源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 社区疫情流动人员管理系统,住户管理,出入管理,访客管理,体温录入,高风险警示等等。 二、项目运…

[原创]CentOS下Mysql双机互为备份

一、环境: 1.安装Centos-6.5-x64位系统的机器两台: host1:192.168.2.3 host2:192.168.2.4 (互相能ping通) 2.安装Mysql。 命令:Yum install mysql-* 二、配置: 1、启动mysql。命令&…

《Effective Java》读书笔记--创建和销毁对象

2019独角兽企业重金招聘Python工程师标准>>> 考虑用静态工厂方法代替构造函数。 当我们在写一个工具类时,是不希望用户将该类实例化的,所以应该定义一个private的构造函数,而不 是将类声明成abstract,因为这样用户可以…

用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本

用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本 Chrome的snippets是小脚本,还可以创作并在Chrome DevTools的来源面板中执行。可以访问和从任何页面运行它们。当你运行一个片段,它从当前打开的页面的上下文中执行。 要创…

两个类相互包含引用的问题--类前向声明

在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } class B { int i; A* a; } 请注意上面的定义内…

Java项目:网上电子书城项目(java+SSM+JSP+maven+Mysql)

源码获取:博客首页 "资源" 里下载! 项目描述: spring mvc jsp实现的简单书城项目,可以在支付宝沙箱内实现支付 运行环境: jdk8tomcat9mysqlIntelliJ IDEA 项目技术: springspring mvcmybati…

[nowCoder] 局部最小值位置

定义局部最小的概念。arr长度为1时&#xff0c;arr[0]是局部最小。arr的长度为N(N>1)时&#xff0c;如果arr[0]<arr[1]&#xff0c;那么arr[0]是局部最小&#xff1b;如果arr[N-1]<arr[N-2]&#xff0c;那么arr[N-1]是局部最小&#xff1b;如果0<i<N-1&#xff…

log parser 微软iis 日志分析

Log Parser 2.2 您可以从 Microsoft 下载中心下载 Log Parser。 Log Parser 2.2 是一个功能强大的通用工具&#xff0c;它可对基于文本的数据&#xff08;如日志文件、XML 文件和 CSV 文件&#xff09;以及 Windows 操作系统上的重要数据源&#xff08;如事件日志、注册表、文件…

ubuntu 大小写指示的小工具

最近买个了小本lenovo x100e&#xff0c;结果发现这小本没有大小写指示灯&#xff0c;在windows用也无妨&#xff0c;不过我常常用这本在ubuntu中调试linux代码&#xff0c;vi 常用的编辑器&#xff0c;熟悉的都知道&#xff0c;大小写很关键的&#xff0c;用google搜了一下&am…

mysql主键约束和唯一性约束

主键约束和唯一性约束都是索引&#xff0c;它们的区别是&#xff1a; 主键字段可以确保唯一性&#xff0c;但主键字段不能为NULL.唯一性约束可以确保唯一性&#xff0c;但唯一性约束的字段可以为NULL唯一性约束对含有NULL的记录不起作用&#xff0c;即可以重复加入含有NULL的记…

Java项目:农资采购销售系统(java+SSM+Easyui+maven+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a; 一个完整的农资采购销售系统&#xff0c;系统分为前台会员注册登陆&#xff0c;农资信息浏览&#xff0c;农资详情信息查看&#xff0c;加入购物车&#xff0c;提交订单&#xff0c;付…

springMVC 拦截器

为什么80%的码农都做不了架构师&#xff1f;>>> 实现springMVC 拦截器步骤&#xff1a; 1.定义拦截器类HandlerInterceptor 继承HandlerInterceptor public class Interceptor implements HandlerInterceptor { /**preHandle&#xff1a;预处理回调方法&#…

django学习笔记--数据库中的多表操作

1.Django数据库----多表的新增操作 1.一对一模式下新增 创建一个详情对象&#xff0c;把这个对象赋值给创建的新的user对象 author_detail models.AuthorDetail.objects.create(addr上海,phone178****4789) # 直接设置author_detail为一个对象 author models.Author.objects.…

+z +Z compiler flag for HP

1. 今天遇到一问题&#xff0c;在sles11/vxworks下编译通过&#xff0c;但是在hpux下失败 2. 编译错误&#xff1a; /usr/ccs/bin/ld:DP relative code in file /projects/xxx/DERIVED/tfa_pa32-hpux.a(tfa02_pa32-hpux.o) -shared library must be position indep…