|
21 pointers_to_members C++特有 #pragma pointers_to_members(pointer-declaration, [most-general-representation] ) 指定是否能够在相关类定义之前说明一个指向类成员的指针,并且用于控制指针的大小和解释指针的代码。你能够在你的源代码中使用pointers_to_members编译知识来代替/vmx编译程序选项。 pointer-declaration参数指出是否在相关函数定义之前或其后你已经说明了一个指向成员的指针。pointer-declaration参数是下面两个符号之一:
most-general-representaion参数指出在一个翻译单元中编译程序能够安全引用任何指向类成员指针的最小指针表示方式。这个参数可以是下列之一:
22 setlocale #pragma setlocale( "locale-string" ) 定义用于翻译宽字符常数和字符串文字量时用的地区(国家和语言)。由于用于从多字节字符转换到宽字符的算法根据地区或者由于在运行可执行程序不同的地方进行编译而不同,这个编译指示提供一种在编译时指定目标地区的方式。这保证宽字符字符串将以正确的格式保存。默认的locale-string是“C”。“C”地区将字符串中的每个字符作为wchar_t(即unsigned int)映射其值。 23 vtordisp C++特有 #pragma vtordisp({on | off} ) 允许隐藏的附加vtordisp构造函数/析构函数替换成员。vtordisp编译指示仅能够用于具有虚拟基类的代码。如果派生类从一个虚拟基类重载了一个虚拟函数,并且如果派生类的构造函数或析构函数用指向虚拟基类的指针调用了这个函数,编译程序将根据虚拟基类在类中引入一个附加的隐藏“vtordisp”域。 vtodisp编译选项影响它后面的类布局。/vd0和/vd1选项为整个模块指定了相同的行为。指定off将禁止隐藏的vtordisp成员,指定on(默认)将在它们需要的时候允许vtordisp。仅在不可能出现类的构造函数和析构函数通过this指针调用其指向对象中的虚拟函数时才关闭vtordisp。 #pragma vtordisp( off ) class GetReal : virtual public { ... }; #pragma vtordisp( on ) 24 warning #pragma warning( warning-specifier : warning-number-list [,warning-specifier : warning-number-list...] ) #pragma warning( push[ , n ] ) #pragma warning( pop ) 允许有选择地修改编译程序警告信息的行为。 warning-specifier能够是下列值之一:
warning-number_list能够包含任何警告编号。如下,在一个编译指示中可以指定多个选项: #pragma warning( disable : 4507 34; on 这等价于: #pragma warning( disable : 4507 34 ) // Disable warning messages // 4507 and 34. #pragma warning( on // on #pragma warning( error : 164 ) // Report warning 164 // as an error. 对于那些关于代码生成的,大于4699的警告标号,warning编译指示仅在函数定义外时有效。如果指定的警告编号大于4699并且用于函数内时被忽略。下面例子说明了用warning编译指示禁止、然后恢复有关代码生成警告信息的正确位置: int a; #pragma warning( disable : 4705 ) void func() { a; } #pragma warning( default : 4705 ) warning编译指示也支持下面语法: #pragma warning( push [ ,n ] ) #pragma warning( pop ) 这里n表示警告等级(1到4)。 warning(push)编译指示保存所有警告的当前警告状态。warning(push,n)保存所有警告的当前状态并将全局警告等级设置为n。 warning(pop)弹出最后一次推入堆栈中的警告状态。任何在push和pop之间改变的警告状态将被取消。考虑下面的例子: #pragma warning( push ) #pragma warning( disable : 4705 ) #pragma warning( disable : 4706 ) #pragma warning( disable : 4707 ) // Some co #pragma warning( pop ) 在这些代码的结束,pop恢复了所有警告的状态(包括4705,4706和4707)到代码开始时候的样子。 当你编写头文件时,你能用push和pop来保证任何用户修改的警告状态不会影响正常编译你的头文件。在头文件开始的地方使用push,在结束地方使用pop。例如,假定你有一个不能顺利在4级警告下编译的头文件,下面的代码改变警告等级到3,然后在头文件的结束时恢复到原来的警告等级。 #pragma warning( push, 3 ) // Declarations/ definitions #pragma warning( pop ) |
C++编译指令详解
1155

被折叠的 条评论
为什么被折叠?



