编程经常碰到,理解的总不是很透彻,在这里查阅资料总结一下!
在编写程序的时候,我们常用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。
#pragma once :
这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,避免文件被重复包含。
#pragma comment :
该 指令的格式:
#pragma comment( comment-type [,"commentstring"] )
该指令将一个注释记录放入一个对象文件或可执行文件中。
comment-type(注释类型):可以指定为五种预定义的标识符的其中一种。
commentstring是一个提供为comment-type提供附加信息的字符串,
五种预定义的标识符为:
1、compiler:
将编译器的版本号和名称放入目标文件中,本条注释记录将被编译器忽略。
如果你为该记录类型提供了commentstring参数,编译器将会产生一个警告。
例如:#pragma comment( compiler )
2、exestr:
将commentstring参数放入目标文件中,在链接的时候这个字符串将被放入到可执行文件中。
当操作系统加载可执行文件的时候,该参数字符串不会被加载到内存中.但是,该字符串可以被dumpbin之类的程序查找出并打印出来,你可以用这个标识符将版本号码之类的信息嵌入到可执行文件中!
3、lib:
这是一个非常常用的关键字,用来将一个库文件链接到目标文件中。
常用的lib关键字,可以帮我们连入一个库文件。
例如: #pragma comment(lib, "user32.lib")
该指令用来将user32.lib库文件加入到本工程中。
4、linker:
将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置的链接选项,你可以指定/include选项来强制包含某个对象。
例如:
#pragma comment(linker, "/include:__mySymbol")
你可以在程序中设置下列链接选项
/DEFAULTLIB
-
/EXPORT
-
/INCLUDE
-
/MANIFESTDEPENDENCY
-
/MERGE
-
/SECTION
(1)/DEFAULTLIB:library
/DEFAULTLIB 选项将一个 library 添加到 LINK 在解析引用时搜索的库列表。用 /DEFAULTLIB指定的库在命令行上指定的库之后和 .obj 文件中指定的默认库之前被搜索。
忽略所有默认库 (/NODEFAULTLIB) 选项重写 /DEFAULTLIB:library。如果在两者中指定了相同的 library 名称,忽略库 (/NODEFAULTLIB:library) 选项将重写 /DEFAULTLIB:library。
(2)/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
使用该选项,可以从程序导出函数,以便其他程序可以调用该函数。也可以导出数据。通常在 DLL 中定义导出。entryname 是调用程序要使用的函数或数据项的名称。ordinal 在导出表中指定范围在 1 至 65,535 的索引;如果没有指定 ordinal,则 LINK 将分配一个。NONAME 关键字只将函数导出为序号,没有 entryname。
DATA 关键字指定导出项为数据项。客户程序中的数据项必须用 extern __declspec(dllimport) 来声明。
有三种导出定义的方法,按照建议的使用顺序依次为:
-
源代码中的 __declspec(dllexport)
-
.def 文件中的 EXPORTS 语句
-
LINK 命令中的 /EXPORT 规范
所有这三种方法可以用在同一个程序中。LINK 在生成包含导出的程序时还创建导入库,除非生成中使用了 .exp 文件。
LINK 使用标识符的修饰形式。编译器在创建 .obj 文件时修饰标识符。如果 entryname 以其未修饰的形式指定给链接器(与其在源代码中一样),则 LINK 将试图匹配该名称。如果无法找到唯一的匹配名称,则 LINK 发出错误信息。当需要将标识符指定给链接器时,请使用 Dumpbin 工具获取该标识符的修饰名形式。
(3)/INCLUDE:symbol
/INCLUDE 选项通知链接器将指定的符号添加到符号表。
若要指定多个符号,请在符号名称之间键入逗号 (,)、分号 (;) 或空格。在命令行上,对每个符号指定一次 /INCLUDE:symbol。
链接器通过将包含符号定义的对象添加到程序来解析 symbol。该功能对于添包含不会链接到程序的库对象非常有用。用该选项指定符号将通过 /OPT:REF 重写该符号的移除。
我们经常用到的是#pragma comment(lib,"*.lib")这类的。
#pragma comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。
和在工程设置里写上链入Ws2_32.lib的效果一样
5、user:
将一般的注释信息放入目标文件中,commentstring参数包含注释的文本信息,这个注释记录将被链接器忽略。
例如:
#pragma comment( user, "Compiled on " __DATE__ " at " __TIME__ )
感谢 哇客影视网 的投递
新闻来源:开源中国社区
根据 Ubuntu 10.10 的开发计划,第一个 Alpha 版本将于本周四发布。而正式版会在今年的10月份发布。以下是发布计划:
Month |
Date |
Release |
June |
3 |
Alpha 1 |
July |
1 |
Alpha 2 |
August |
5 |
Alpha 3 |
September |
5 |
Alpha 4 |
September |
23 |
Beta |
October |
21 |
Release Candidate |
October |
28 |
Final Release |
下图是 Ubuntu 10.10 的代号:Maverick Meerkat
微软负责知识产权和许可事务的副总法律顾问霍拉西奥·古铁雷斯(Horacio Gutierrez)发表声明称,该公司一直“在与数家手机厂商洽谈,解决我们有关Android手机平台的担忧”。古铁雷斯没有披露微软在与哪些公司洽谈。
谷歌免费向手机厂商提供Android,通过Android手机搜索和其他应用中的广告获取收入。市场研究公司Interpret分析师迈克尔·加滕伯格(Michael Gartenberg)说,微软的要求扩大了Android的法律问题,可能会有更多公司试图对Android手机收取专利使用费,“微软的要求发出了一个重要信息:Android不仅不是免费的,而且价格会随着时间不断提高。宏达电销售的每部Android都会给微软带来一笔专利使用费”。
市场研究公司Enderle Group首席分析师罗布·恩德勒(Rob Enderle)估计,宏达电和大多数其他手机厂商需要为每部Android手机向微软支付20美元至40美元的专利使用费。除非谷歌能解决这一问题, “成本高昂和法律风险将使Android遭遇失败,没有公司愿意向微软达支付专利使用费”。
苹果已经指控宏达电的Android手机侵犯了其专利。加滕伯格说,RIM、诺基亚和Palm也可能声称Android包含它们的专利技术。
谷歌发言人安东尼·豪斯(Anthony House)表示,该公司目前不会就此事发表评论。
苹果已经向美国国际贸易委员会投诉宏达电,要求禁止宏达电向美国市场出口Android手机。
古铁雷斯3月15日发表博客文章称,苹果起诉宏达电表明,手机业“正处于确定互联网访问、下载等软件专利使用费的过程中”,微软“在许可交易方面一贯奉行先发制人的策略”。
1. 苹果
2. 谷歌
3. 微软
4. IBM
5. 丰田汽车
6. 亚马逊
7. LG
8. 比亚迪
9. 通用电气
10. 索尼