pragma once是什么意思?
作為一名c++門外漢健提,只能采取硬攻的方式了琳猫,在這篇文章以及c++ primer plus中都有解釋,一般來(lái)說(shuō)避免同一個(gè)頭文件被包含多次有兩種方法:
<pre>#ifndef SOMEFILE_H
define SOMEFILE_H
... ... // 一些聲明語(yǔ)句
endif
pragma once</pre>
關(guān)于第一種方法文章里說(shuō)#ifndef
的方式依賴于宏名字不能沖突私痹,這不光可以保證同一個(gè)文件不會(huì)被包含多次脐嫂,也能保證內(nèi)容完全相同的兩個(gè)文件不會(huì)被不小心同時(shí)包含。當(dāng)然紊遵,缺點(diǎn)就是如果不同頭文件的宏名不小心“撞車”账千,可能就會(huì)導(dǎo)致頭文件明明存在,編譯器卻硬說(shuō)找不到聲明的狀況 意思是暗膜,假如有兩個(gè)文件夾匀奏,每個(gè)文件夾中都有一個(gè)child.h文件,但他們本身功能是不一樣的学搜,又有一個(gè)use.h文件引用了第一個(gè)文件夾的child.h娃善,當(dāng)你同時(shí)引用use.h和第二個(gè)child.h時(shí)就會(huì)出現(xiàn)問(wèn)題:
<pre> -----child.h(second folder)
|
main.cpp---
|
-----use.h
|
-----child.h(first folder)</pre>
關(guān)于第二種方法文章里說(shuō):
#pragma once
則由編譯器提供保證:同一個(gè)文件不會(huì)被包含多次论衍。注意這里所說(shuō)的“同一個(gè)文件”是指物理上的一個(gè)文件,而不是指內(nèi)容相同的兩個(gè)文件聚磺。帶來(lái)的好處是坯台,你不必再費(fèi)勁想個(gè)宏名了,當(dāng)然也就不會(huì)出現(xiàn)宏名碰撞引發(fā)的奇怪問(wèn)題瘫寝。對(duì)應(yīng)的缺點(diǎn)就是如果某個(gè)頭文件有多份拷貝蜒蕾,本方法不能保證他們不被重復(fù)包含。當(dāng)然矢沿,相比宏名碰撞引發(fā)的“找不到聲明”的問(wèn)題滥搭,重復(fù)包含更容易被發(fā)現(xiàn)并修正。
方式一由語(yǔ)言支持所以移植性好捣鲸,方式二 可以避免名字沖突
PeekMessage 和 getMessage的區(qū)別
靜態(tài)變量的初始化: GameEngine *GameEngine::m_engine = Null?
windows 程序啟動(dòng)流程?
GameEngine的啟動(dòng)流程闽坡?
聲明RECT rect
栽惶,為什么這樣:GetClientRect(hWindow, &rect)
,而不這樣:rect=GetClientRect(hWindow)
POINT *pt代表的是個(gè)數(shù)組POINT points[3]疾嗅,pt=points外厂,為什么?
GameEngine \*g_engine
代承,類怎么這樣,可是一個(gè)指針呀,g_engine=new GameEngine(&^&%^&*&&%)
windows的句柄到底是什么東西汁蝶?
關(guān)于指針數(shù)組,何時(shí)分配空間论悴?
聲明一個(gè)函數(shù)不定義會(huì)怎么樣掖棉?
函數(shù)聲明時(shí)即給形參賦默認(rèn)值?