看了看 #ifndef 和#pragma once 的区别
刚开始学习程序的时候,老师就说过用#ifndef 这样的结构防止头文件被重复包含,所以就没有关心那么多。今天可能由于自家底层系统缘故,陈工说最好还是用#pragma once ,于是查了下两个的区别,看了下大神们的博客,所以在此给自己记录下。
两种方式的使用
其一:
#ifndef _AICHANNELSET_H_
#define _AICHANNELSET_H_
函数声明
#endif
其二:
#pragma once
函数声明
第一点ifndef是通过判断宏是否被定义,来决定该文件是否需要被编译器包含编译,一般宏的命名方式都是 _+文件名(大写)+_H_这样的形式,如果没有define,那么就define一次好了,记得之前写程序的时候很多时候都会忘记在最后加上#endif这个语句。有一个比较关键的地方就是这个宏千万不能再别处定义,如果不小心在其他地方定义了,那就很简单了,该文件没有被包含嘛,程序会出现变量未声明等错误。通过在网上查询,有一种解释就是,编译器在执行编译的时候都需要打开这个文件,然后判断该文件是否被define 过,如果是大型工程的话,编译过程就会很花费时间。而#pragma once 不同,它是编译器来提供保证,它的判断机制是物理上的文件是否相同,而不是内容相同的两个文件,这样就省去了重复打开文件操作。所以推荐使用#pragma once 这种写法。
第二点就是#ifndef 是c/c++的标准,所以走到哪里都会被支持,而#pragma once 是#ifndef 之后产生的 一些老的编译器可能不被支持。不过现在做开发很少人用Turbo C 或者vc 6 了吧。所以基本不存在什么问题。
第三点还有一种写法就是两者可以同时使用,像这样。但是也没查到也不清楚这样写有什么好处
#pragma once
#ifndef _AICHANNELSET_H_
#define _AICHANNELSET_H_
#endif
第一次写,再接再励!
看了看 #ifndef 和#pragma once 的区别的更多相关文章
- c++中#ifndef ... 与#pragma once的区别
原文链接:https://www.cnblogs.com/qiang-upc/p/11407364.html (1)C/C++防止头文件被include多次的方法:#ifnde.. 及 #prag ...
- 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!
瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...
- 2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
---恢复内容开始--- 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个.不同字符,图形不一样. 2.程序源代码: [code=c] #i ...
- Loj#6183. 看无可看
Loj#6183. 看无可看 题目描述 首先用特征根求出通项公式\(A_n=p\cdot 3^n+q\cdot(-1)^n\).通过给定的\(f_0,f_1\)可以解出\(p,q\). 然后我们要求的 ...
- 看无可看 分治FFT+特征值方程
题面: 看无可看(see.pas/cpp/c) 题目描述 “What’s left to see when our eyes won’t open?” “若彼此瞑目在即,是否终亦看无可看?” ---- ...
- Scrum模拟微信看一看“疫情专区”的敏捷开发过程
无论作为产品用户还是管理咨询顾问,都非常非常喜欢微信.自认感情比较克制属于“高冷”挂,但从很多方面都太佩服太崇拜张小龙了(新书里微信也会是最喜欢的案例之一,真的不只是一个产品而已,很多方面都太牛了). ...
- Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)
转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...
- #ifndef 与 #program once 的区别(转)
转自http://hi.baidu.com/hrx20091001/item/ee70f7cc6d036d4ea9ba94e0 #ifndef 与 #program once 的区别 为了避免同一个文 ...
- iOS - 基础知识总结(OC版) 面试必看 再不看就要用swift了
OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错 ...
随机推荐
- canvas学习总结五:线段的端点与连接点
我们在第三节中描述了线段的绘制,其中线段的属性lineWidth是用来改变线段的宽度.让我们来回忆下线宽的用法 function drawLine(){ cxt.lineWidth = 3; cxt. ...
- 如何在家自制LED灯?很简单,我来告诉你!
首先LED分凸头.平头和凹头,当中的凹头是没无方向性. 做示宽灯这类晚间才运用的光源,用凹头就好,它没无方向性,可将整个反光碗照亮. 做转向灯等指示性的光源用,准绳上应该用凸头的,它是个聚光镜,投映的 ...
- Java基础----jdk1.8 反射实验
(写在最前:还没入门的搬砖工的一本正经的胡说八道) 引言: 最近做到的项目中,需要给对接方提供一个公共接口,根据对方传入的XML文件的rootelement分发调用接口,最简单的使用if-else ...
- Linux内核互斥锁--mutex
一.定义: /linux/include/linux/mutex.h 二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实现的,但这对于内核用户是不可见 ...
- JavaScript第三课 (循环)
循环语句 !如果至少需要执行一次循环体,就用do … while语句,一般情况下用while语句就可以了. while 语法:一直读取循环到条件为假时停止循环. while(条件) { 语 ...
- PHP源码阅读strtr
strtr 转换字符串中特定的字符,但是这个函数使用的方式多种. echo strtr('hello world', 'hw', 'ab'); // 第一种 aello borld echo strt ...
- HTML应用程序(HTML App)
HTML应用程序(HTML App) 一个简单的 html app例子: <HTML><HEAD><TITLE>hta示例</TITLE><HTA ...
- Django学习(一)---基本配置及创建项目、应用
安装:在Django官网下载最新版Django然后通过pip安装即可 一.创建项目 进入文件夹,打开cmd窗口,输入django-admin startproject myblog(项目名) 二.创建 ...
- CSS 样式书写规范
可能不同团队都有各自的规范,又或者很多人在写 CSS 的时候还是想到什么就写什么,不存在太多的约束. 我觉得 CSS 代码规范还是有存在的必要的,尤其是在团队配合,多人协作下,规范就显得尤为重要. 本 ...
- 由max_allowed_packet引发的mysql攻防大战
1.原因 程序的sql语句比较长.max_allowed_packet默认是1024.于是就报错了.一开始手动改 global max_allowed_packet ,改完后.莫名奇妙被还原.后来改配 ...