<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>西瓜田 &#187; 预编译</title>
	<atom:link href="http://blog.thpiano.com/?feed=rss2&#038;tag=%E9%A2%84%E7%BC%96%E8%AF%91" rel="self" type="application/rss+xml" />
	<link>http://blog.thpiano.com</link>
	<description>无复洛城东</description>
	<lastBuildDate>Tue, 19 Jan 2021 03:54:37 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>初探#pragma</title>
		<link>http://blog.thpiano.com/?p=173</link>
		<comments>http://blog.thpiano.com/?p=173#comments</comments>
		<pubDate>Thu, 03 Nov 2011 13:12:20 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[#pragma]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[预编译]]></category>

		<guid isPermaLink="false">http://172.18.126.172/blog/?p=173</guid>
		<description><![CDATA[今天老师上课提到了宏定义的用途，抛出一个问题： #pragma的哪个功能最常见？ 我凭借印象回答说是once，老师没点我；在黑板上写下#pragma pack(1)，引出struct的内存对齐。 不过凭印象里面，的确是#pragma once比较常见呀，还有去掉warning、链接lib什么的。可能和老师精通嵌入式开发有关 于是在这里整理下#pragma的几种常见用途好了 1.#pragma pack(x) 表示接下来的struct内存对齐以x字节为标准单位（即内存对齐长度不会小于x字节）。使用#pragma pack()来恢复使用默认对齐方式 &#160; 2.#pragma once 加入这个之后，可使头文件在被多次include的情况下只编译一次，避免重复定义等麻烦事； 当然有一个传统的做法是#ifndef xxx -&#62; #define xxx  -&#62; 代码段 -&#62; #endif，用途一样 二者的差异是： #pragma once编译速度快一些，不用怕想出的宏名冲突，对整个文件有效； #ifndef支持性更好（特别是非vs编译器上），可针对文件内的部分代码生效 &#160; 3.#pragma comment( comment-type ,["commentstring"] ) 这里的功能比较多，光是comment-type就可以分为5种：compiler，exestr，lib，linker，user 其中lib用的最多，#pragma comment(lib,"bass.lib") 就把bass.lib加入到工程里了，这样就不需要再从工程配置文件里进行设置 其他的就不多提了，这方面的文章一搜一堆~ &#160; 4.#pragma warning( warning-type , warning-number...) 可以控制编译器的警告输出！比如某个警告一出一大堆你又看着碍眼，就可以利用这个屏蔽掉 warning-type可填once、error、disable、enable、default等，分别对应：显示一次、按错误处理、不显示警告、显示警告、默认设置 warning-number就是警告的代号。当然填法还是多样的，可以几个处理填到一行里，比如： #pragma warning( disable :  4100 4511 4512 4663 4245 [...]]]></description>
			<content:encoded><![CDATA[<p>今天老师上课提到了宏定义的用途，抛出一个问题：</p>
<p>#pragma的哪个功能最常见？</p>
<p>我凭借印象回答说是once，老师没点我；在黑板上写下#pragma pack(1)，引出struct的内存对齐。</p>
<p>不过凭印象里面，的确是#pragma once比较常见呀，还有去掉warning、链接lib什么的。可能和老师精通嵌入式开发有关</p>
<p>于是在这里整理下#pragma的几种常见用途好了</p>
<p><span id="more-173"></span>1.#pragma pack(x)</p>
<p>表示接下来的struct内存对齐以x字节为标准单位（即内存对齐长度不会小于x字节）。使用#pragma pack()来恢复使用默认对齐方式</p>
<p>&nbsp;</p>
<p>2.#pragma once</p>
<p>加入这个之后，可使头文件在被多次include的情况下只编译一次，避免重复定义等麻烦事；</p>
<p>当然有一个传统的做法是#ifndef xxx -&gt; #define xxx  -&gt; 代码段 -&gt; #endif，用途一样</p>
<p>二者的差异是：</p>
<p>#pragma once编译速度快一些，不用怕想出的宏名冲突，对整个文件有效；</p>
<p>#ifndef支持性更好（特别是非vs编译器上），可针对文件内的部分代码生效</p>
<p>&nbsp;</p>
<p>3.#pragma comment( comment-type ,["commentstring"] )</p>
<p>这里的功能比较多，光是comment-type就可以分为5种：compiler，exestr，lib，linker，user</p>
<p>其中lib用的最多，#pragma comment(lib,"bass.lib") 就把bass.lib加入到工程里了，这样就不需要再从工程配置文件里进行设置</p>
<p>其他的就不多提了，这方面的文章一搜一堆~</p>
<p>&nbsp;</p>
<p>4.#pragma warning( warning-type , warning-number...)</p>
<p>可以控制编译器的警告输出！比如某个警告一出一大堆你又看着碍眼，就可以利用这个屏蔽掉</p>
<p>warning-type可填once、error、disable、enable、default等，分别对应：显示一次、按错误处理、不显示警告、显示警告、默认设置</p>
<p>warning-number就是警告的代号。当然填法还是多样的，可以几个处理填到一行里，比如：</p>
<p>#pragma warning( disable :  4100 4511 4512 4663 4245 4018 4514)</p>
<p>#pragma warning( disable : 4507; once : 4385; error : 164 )</p>
<p>#prama warning只对所在的头文件、以及包含该头文件的有效</p>
<p>&nbsp;</p>
<p>其他的一些用法比如显示编译消息的#pragma message()、开发驱动会用到的#pragma code_seg()、引入资源的#pragma resource ，以及一些针对特定编译器的用法，就不多提了</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=173</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
