在头文件中用这种写法就是为了该头文件被重复包含时不会出现符合重定义的错误. 效果等同于     #ifndef __xxx__     #define __xxx__     ...    #endif // __xxx__ 详细如下: #pragma once和ifndef使用异同为了避免同一个文件被include多次1   #ifndef方式2   #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别.       方式一: #i…
之前已经接触过Vertex Shader和Fragment Shader,这次学习如何编写Shader并封装成类. Shader源码主要有四部分: 版本声明 #version xxx core: 使用in和out关键字定义输入输出变量,上一个Shader的输出变量必须和下一个Shader的输入变量保持一致: 有时使用uniform关键字定义全局变量: main主函数. 看一个Vertex Shader的例子: #version 330 core layout (location = 0) in…
############################################################################## Generic Makefile for C/C++ Program# 用法:# ------# 1. 拷贝Makefile到你的代码目录下# 2. 只有在必要时"Customizable Section"自定义# * 为了使用非标准库,设置预编译器和编译器<MY_CFLAGS>,链接器<MY_LIBS>#…
############################################################################## Generic Makefile for C/C++ Program# Usage:# ------# 1. Copy the Makefile to your program directory.# 2. Customize in the "Customizable Section" only if necessary:#   …
php中的内存分配有用类似emalloc这样的函数,emalloc实际上是C语言中的malloc的一层封装,php启动后,会向OS申请一块内存,可以理解为内存池,以后的php分配内存都是在这块内存池中进行的,以至于efree,也不会向OS退回内存,而只是设置标志位,标识efree这块内存不再使用了,这样做的好处是,速度快,避免系统调用,因为频繁的从用户态和内核态之间的切换是很费CPU的. C语言的malloc函数的后面是glibc(内存管理系统) , 前段时间在看到php内存分配时,看到了ema…
glibc-2.14中的malloc.c源代码,供研究malloc和free实现使用: /* Malloc implementation for multiple threads without lock contention. Copyright (C) 1996-2009, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloge…
转自http://hi.baidu.com/hrx20091001/item/ee70f7cc6d036d4ea9ba94e0 #ifndef 与 #program once 的区别 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别.    方式一:    #ifndef __SOMEFILE_H__    #define __SOM…
PostgreSQL 和 MySQL 在用途.好处.特性和特点上的异同. PostgreSQL 和 MySQL 是将数据组织成表的关系数据库.这些表可以根据每个表共有的数据链接或关联.关系数据库使您的企业能够更好地了解可用数据之间的关系,并帮助获得新的见解以做出更好的决策或发现新的机会. PostgreSQL 和 MySQL 有何相似之处? PostgreSQL 和 MySQL 都依赖于 SQL(结构化查询语言),这是与管理系统交互的标准语言.SQL 允许使用具有简单结构的几行源代码连接表,大多…
为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式.在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别. 不同的地方 // 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 声明.定义语句 #endif //方式二: #pragma once ... ... // 声明.定义语句 #ifndef的方式受C/C++语…
2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多,那么其中的宏, 也会很多. 免不了冲突定义.这时候, 我们就需要编译器能及早的告诉我们.那就是在编译的时候.#error就可以这么实现: /** 如果JOE宏没有定义,那么编译就此结束, 编译器就会显示红色的错误 */ #ifndef JOE #error "JOE is not exits&quo…