搜档网
当前位置:搜档网 › #pragma指令用法汇总和解析

#pragma指令用法汇总和解析

#pragma指令用法汇总和解析
#pragma指令用法汇总和解析

#pragma指令用法汇总和解析

一. message 参数。

message

它能够在编译信息输出窗

口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:

#pragma message(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。

当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条

指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法

#ifdef _X86

#pragma message(“_X86 macro activated!”)

#endif

当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_

X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了

二. 另一个使用得比较多的#pragma参数是code_seg。格式如:

#pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节

为.text节

如果code_seg没有带参数的话,则函数存放在.text节中

push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名

pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名

identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈

"segment-name" (可选参数) 表示函数存放的节名

例如:

//默认情况下,函数被存放在.text节中

void func1() { // stored in .text

}

//将函数存放在.my_data1节中

#pragma code_seg(".my_data1")

void func2() { // stored in my_data1

}

//r1为标识符,将函数放入.my_data2节中

#pragma code_seg(push, r1, ".my_data2")

void func3() { // stored in my_data2

}

int main() {

}

三. #pragma once (比较常用)

这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次

四. #pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。

BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。

有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup 指定编译优先级,

如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。

五. #pragma warning指令

该指令允许有选择性的修改编译器的警告消息的行为

指令格式如下:

#pragma warning( warning-specifier : warning-number-list [; warning-specifier :

warning-number-list...]

#pragma warning( push[ ,n ] )

#pragma warning( pop )

主要用到的警告表示有如下几个:

once:只显示一次(警告/错误等)消息

default:重置编译器的警告行为到默认状态

1,2,3,4:四个警告级别

disable:禁止指定的警告信息

error:将指定的警告信息作为错误报告

如果大家对上面的解释不是很理解,可以参考一下下面的例子及说明

#pragma warning( disable : 4507 34; once : 4385; error : 164 )

等价于:

#pragma warning(disable:4507 34) // 不显示4507和34号警告信息

#pragma warning(once:4385) // 4385号警告信息仅报告一次

#pragma warning(error:164) // 把164号警告信息作为一个错误。

同时这个pragma warning 也支持如下格式:

#pragma warning( push [ ,n ] )

#pragma warning( pop )

这里n代表一个警告等级(1---4)。

#pragma warning( push )保存所有警告信息的现有的警告状态。

#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告

等级设定为n。

#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的

一切改动取消。例如:

#pragma warning( push )

#pragma warning( disable : 4705 )

#pragma warning( disable : 4706 )

#pragma warning( disable : 4707 )

#pragma warning( pop )

在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)

在使用标准C++进行编程的时候经常会得到很多的警告信息,而这些警告信息都是不必要的提示,

所以我们可以使用#pragma warning(disable:4786)来禁止该类型的警告

在vc中使用ADO的时候也会得到不必要的警告信息,这个时候我们可以通过

#pragma warning(disable:4146)来消除该类型的警告信息

六. pragma comment(...)

该指令的格式为

#pragma comment( "comment-type" [, commentstring] )

该指令将一个注释记录放入一个对象文件或可执行文件中,

comment-type(注释类型):可以指定为五种预定义的标识符的其中一种

五种预定义的标识符为:

compiler:将编译器的版本号和名称放入目标文件中,本条注释记录将被编译器忽略

如果你为该记录类型提供了commentstring参数,编译器将会产生一个警告

例如:#pragma comment( compiler )

exestr:将commentstring参数放入目标文件中,在链接的时候这个字符串将被放入到可执行文件中, 当操作系统加载可执行文件的时候,该参数字符串不会被加载到内存中.但是,该字符串可以被

dumpbin之类的程序查找出并打印出来,你可以用这个标识符将版本号码之类的信息嵌入到可执行文件中!

lib:这是一个非常常用的关键字,用来将一个库文件链接到目标文件中

常用的lib关键字,可以帮我们连入一个库文件。

例如:

#pragma comment(lib, "user32.lib")

该指令用来将user32.lib库文件加入到本工程中

linker:将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置的链接选项,你可以指定/include选项来强制包含某个对象,例如:

#pragma comment(linker, "/include:__mySymbol")

你可以在程序中设置下列链接选项

/DEFAULTLIB

/EXPORT

/INCLUDE

/MERGE

/SECTION

这些选项在这里就不一一说明了,详细信息请看msdn!

user:将一般的注释信息放入目标文件中commentstring参数包含注释的文本信息,这个注释记录将被链接器忽略

例如:

#pragma comment( user, "Compiled on " __DATE__ " at " __TIME__ )

#pragma data_seg——新的尝试- -

#pragma data_seg之前从来没有用过,今天经同事指点,找出了它的一个妙用。

持续整理中......

#pragma data_seg介绍

应用一:单应用程序。

有的时候我们可能想让一个应用程序只启动一次,就像单件模式(singleton)一样,实现的方法可能有多种,这里说说用#pragma data_seg来实现的方法,很是简洁便利。

应用程序的入口文件前面加上

#pragma data_seg("flag_data")

int app_count = 0;

#pragma data_seg()

#pragma comment(linker,"/SECTION:flag_data,RWS")

然后程序启动的地方加上

if(app_count>0) // 如果计数大于0,则退出应用程序。

{

//MessageBox(NULL, "已经启动一个应用程序", "Warning", MB_OK);

//printf("no%d application", app_count);

return FALSE;

}

app_count++;

通过#pragma pack(n)改变C编译器的字节对齐方式

在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。

例如,下面的结构各成员空间分配情况:

struct test

{

char x1; // 偏移地址为0

short x2;// 偏移地址为[2,3]

float x3;// 偏移地址为[4,7]

char x4; // 偏移地址为8

};

结构的第一个成员x1,其偏移地址为0,占据了第1个字节。第二个成员x2为short类型,其起始地址必须2字节对界,因此,编译器在x2和x1之间填充了一个空字节。结构的第三个成员x3和第四个成员x4恰好落在其自然对界地址上,在它们前面不需要额外的填充字节。在test结构中,成员x3要求4字节对界,是该结构所有成员中要求的最大对界单元,因而test结构的自然对界条件为4字节,编译器在成员x4后面填充了3个空字节。整个结构所占据空间为12字节。更改C编译器的

缺省字节对齐方式在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配

空间。一般地,可以通过下面的方法来改变缺省的对界条件:

· 使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。

· 使用伪指令#pragma pack (),取消自定义字节对齐方式。

另外,还有如下的一种方式:

· __attribute((aligned (n))),让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。

· __attribute__ ((packed)),取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。以上的n = 1, 2, 4, 8, 16... 第一种方式较为常见。

在网络协议编程中,经常会处理不同协议的数据报文。一种方法是通过指针偏移的

方法来得到各种信息,但这样做不仅编程复杂,而且一旦协议有变化,程序修改起来

也比较麻烦。在了解了编译器对结构空间的分配原则之后,我们完全可以利用这

一特性定义自己的协议结构,通过访问结构的成员来获取各种信息。这样做,

不仅简化了编程,而且即使协议发生变化,我们也只需修改协议结构的定义即可,

其它程序无需修改,省时省力。下面以TCP协议首部为例,说明如何定义协议结构。

其协议结构定义如下:

#pragma pack(1) // 按照1字节方式进行对齐

struct TCPHEADER

{

short SrcPort; // 16位源端口号

short DstPort; // 16位目的端口号

int SerialNo; // 32位序列号

int AckNo; // 32位确认号

unsigned char HaderLen : 4; // 4位首部长度

unsigned char Reserved1 : 4; // 保留6位中的4位

unsigned char Reserved2 : 2; // 保留6位中的2位

unsigned char URG : 1;

unsigned char ACK : 1;

unsigned char PSH : 1;

unsigned char RST : 1;

unsigned char SYN : 1;

unsigned char FIN : 1;

short WindowSize; // 16位窗口大小

short TcpChkSum; // 16位TCP检验和

short UrgentPointer; // 16位紧急指针

};

#pragma pack() // 取消1字节对齐方式

#pragma pack规定的对齐长度,实际使用的规则是:

结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack 指定的数值和这个数据成员自身长度中,比较小的那个进行。

也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。而结构整体的对齐,则按照结构体中最大的数据成员和 #pragma pack指定值之间,较小的那个进行。

在IAR编译器里用关键字来__interrupt来定义一个中断函数。用#pragma vector来提供中断函数的入口地址。

#pragma vector = 0x12 //定时器0溢出中断入口地址

__interrupt void time0(void)

{

;

}

上面的入口地址写成#pragma vector=TIMER0_OVF_vect更直观,每种中断的入口地址在头文件里有描述。函数名称time0可以为任意名称。中断函数会自动保护局部变量,但不会保护全局变量。

1 .内在函数也可以称为本征函数

编译器自己编写的能够直接访问处理器底层特征的函数。在intrinsics.h中有描述完整类型在comp_a90.h里有进一步的简化书写方式

延时函数,以周期为标准

__delay_cycles(unsigned long );

如果处理器频率为1M,延时100us,如下:

__delay_cycles(100 );

当然你也可以对该函数进行修改:

#define CPU_F 1000000

#define delay_us (unsigned long) __delay_cycles((unsigned long )*CPU_F)

#define delay_ms (unsigned long) __delay_cycles((unsigned long )*CPU_F/1000)

2.中断指令

__disable_interrupt( );//插入CLI指令, 也可以用_CLI();也可以SREG_Bit7=0;

__enable_interrupt( );// 插入SEI指令,也可以用_SEI();也可以SREG_Bit7=1;

其实对于状态字的置位和清零只有BSET S 和BCLR S两条指令。像SEI不过是BSET 7;的另一个名字而已。AVR指令中还有很多类似的现象,如:ORI 和 SBR 指令完全一样,号称130多条指令的AVR其实没有那么多指令的。

3.从FLASH空间指定地址读取数据

__extended_load_program_memory(unsigned char __farflash *);

__load_program_memory(unsigned char __flash *);

4.乘法函数

__fracdtional_multiply_signed(signed char, signed char);

__fractional_multiply_signed_with_unsigned(signed char, unsigned char);

__fractional_multiply_unsigned(unsigned char, unsigned char);

//以上为定点小数乘法

__multiply_signed(signed char, signed char);//有符号数乘法

__multiply_signed_with_unsigned(signed char, unsigned char);

//有符号数和无符号数乘法

__multiply_unsigned(unsigned char, unsigned char);//无符号数乘法

5.半字节交换指令

__swap_nibbles(unsigned char);

6.MCU控制指令

__no_operation();//空操作指令

_NOP();

__sleep();//休眠指令

_SLEEP();

__watchdog_reset();//看门狗清零

_WDR();

注意:在实现过程中可能涉及到.XCL连接文件的更改,请保存好原来的.XCL文件!

1.打开相应的*c.xcl文件,用"-Z(CONST)段名=程序定位的目标段-FFDF"定义段的起始地址.

2.在自己的C程序中用#pragma constseg(段名)定位自己的程序

3.结束后恢复编译器的默认定位#pragma default

IAR 1.26b环境下:

1、将常量数组放在FLASH段自定议的MYSEG段中

原来的MSP430F149 XCL文件如下:

// Constant data

-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=1100-FFDF

如果想从中分出一部分做数据存储区,做如下修改:

-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=1500-FFDF //将1100-14FF从ROM中分出存储arry数

-Z(CONST)MYSEG=1100-14FF区间大小可自行决定

在程序中描写如下即可:

#pragma memory = constseg(MYSEG) //在.XCL文件中修改

char arry[]={1,2,3,4,5,6,7};

#pragma memory = default

2、将变量放入所命名的段

在XCL文件中开辟一段MYSEG段,如上所述

#pragma memory = dataseg(MYSEG)

char i;

char j;

int k;

#pragma memory = default

IAR3.10A环境下

xcL文件的更改方法如上

数据定位方法如下三种

1、__no_init char alpha @ 0x0200;

2、#pragma location=0x0202

const int beta;

3、const int gamma @ 0x0204 = 3;

或;

1、__no_init int alpha @ "MYSEGMENT"; //MYSEGMENT段可在XCL中开辟

2、#pragma location="MYSEGMENT"

const int beta;

3、const int gamma @ "MYSEGMENT" = 3;

函数定位如下面两种写法

1、

void g(void) @ "MYSEGMENT" //MYSEGMENT段可在XCL中开辟

{

}

2、

#pragma location="MYSEGMENT"

void h(void)

{

}

Schtasks命令详解

Schtasks 安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。 若要查看该命令语法,请单击以下命令: schtasks create 创建新的计划任务。 语法 schtasks /create

/tn T askName /tr TaskRun /sc schedule [/mo modifier] [/d day] [/m month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer [/u [domain\]user /p password]] [/ru {[Domain\]User | "System"} [/rp Password]] /? 参数 /tn T askName 指定任务的名称。

/tr TaskRun 指定任务运行的程序或命令。键入可执行文件、脚本文件或批处理文件的完全合格的路径和文件名。如果忽略该路径,SchT asks.exe 将假定文件在Systemroot\System32 目录下。 /sc schedule 指定计划类型。有效值为MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。 值 说明 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY指定计划的时间单位。 ONCE任务在指定的日期和时间运行一次。 ONSTART任务在每次系统启动的时候运行。可以指定启动的日期,或下一次系统启动的时候运行任务。 ONLOGON每当用户(任意用户)登录的时候,任务就运行。可以指定日期,或在下次用户登录的时候运行任务。 ONIDLE只要系统空闲了指定的时间,任务就运行。可以指定日期,或在下次系统空闲的时候运行任务。

remain的用法

remain[ri'mein] v. 剩余, 逗留, 留下, 依然, 保持v. We must learn to conserve what remains. v. 我们必须学会保存那些剩余的资源。 v. 剩余 v. We must learn to conserve what remains. v. 我们必须学会保存那些剩余的资源。 v. 逗留 v. I didn't remain long in the city. v. 我没在那个城市逗留很长时间。 v. 留下 v. Though the sore being healed, yet a scar may remain. v. 伤口虽然痊愈, 却可能留下伤疤。 v. 依然 v. The present international situation remains tense and turbulent. v. 当前的国际局势依然紧张动荡。 v. 保持 v. Most of the unearthed relics remain intact. v. 大多数出土文物仍保持完好无损。 n. 剩余物, 遗迹, 残骸 n. 剩余物 n. After maintenance the main remains and remainders are left on the domain. n. 维修之后,主要遗骸和剩余物留在了领地上。 n. 遗迹 n. They have found prehistoric remains. n. 他们发现了史前遗迹。 n. 残骸 n. The remains of the wooden hull are fragile and need special handling. n. 木船体的残骸是很不牢固的,搬动时需要特别小心。 【词源解说】 14世纪晚期进入英语,直接源自古法语的remain;最初源自拉丁语的remanere: re(回)+manere(放,置),意为保留。【词形变化】动词过去式: remained 动词过去分词: remained 动词现在分词: remaining 动词第三人称单数: remains 【词义辨析】 remain, linger, stay 这些动词均有“停留,逗留”之意。 remain: 指某人或某物仍留在原处或保持原来的状态。 linger: 着重因愉快的事而使人不愿离开。 stay: 普通用词,多指人在某地暂时逗留。有时可指较长时间的居留。 【语法用法】 1.remain解释为“保持”,“依然”时,后常接表语。 He remained faithful to his wife all his life.

网络工程师常用网络命令

网络经典命令行 1.最基本,最常用的,测试物理网络的 ping 192.168.0.8 -t ,参数-t是等待用户去中断测试 2.查看DNS、IP、Mac等 A.Win98:winipcfg B.Win2000以上:Ipconfig/all C.NSLOOKUP:如查看河北的DNS C:\>nslookup Default Server: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.68 >server 202.99.41.2 则将DNS改为了41.2 > https://www.sodocs.net/doc/352555305.html, Server: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.68 Non-authoritative answer: Name: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.212 3.网络信使(经常有人问的~) Net send 计算机名/IP|* (广播) 传送内容,注意不能跨网段 net stop messenger 停止信使服务,也可以在面板-服务修改 net start messenger 开始信使服务 4.探测对方对方计算机名,所在的组、域及当前用户名(追捕的工作原理)ping -a IP -t ,只显示NetBios名 nbtstat -a 192.168.10.146 比较全的 https://www.sodocs.net/doc/352555305.html,stat -a 显示出你的计算机当前所开放的所有端口 netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等 6.探测arp绑定(动态和静态)列表,显示所有连接了我的计算机,显示对方IP和MAC地址 arp -a 7.在代理服务器端 捆绑IP和MAC地址,解决局域网内盗用IP!: ARP -s 192.168.10.59 00 -50-ff-6c-08-75 解除网卡的IP与MAC地址的绑定: arp -d 网卡IP

C++ #pragma code_seg用法

#pragma code_seg 格式如: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节为.text节,如果code_seg 没有带参数的话,则函数存放在.text节中。 push (可选参数)将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名 pop(可选参数)将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名identifier(可选参数)当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数)表示函数存放的节名 例如: //默认情况下,函数被存放在.text节中 void func1() {// stored in .text } //将函数存放在.my_data1节中 #pragma code_seg(".my_data1") void func2() {// stored in my_data1 } //r1为标识符,将函数放入.my_data2节中 #pragma code_seg(push, r1, ".my_data2") void func3() {// stored in my_data2 } int main() { } 例如 #pragma code_seg(“PAGE”) 作用是将此部分代码放入分页内存中运行。 #pragma code_seg() 将代码段设置为默认的代码段 #pragma code_seg("INIT") 加载到INIT内存区域中,成功加载后,可以退出内存

Remain的用法

Remain的用法 一、用作联系动词,指某人或某事物仍保持某种状态,意为“仍然;依旧”,“留;呆;住;待”,后面可接名词、代词、形容词、介词短语、分词作表语。 →1. 接名词作表语 Peter became a manager, but Jack remained a worker. 彼得成为了一个经理,而杰克仍然是个工人。 It remained a secret. 这仍然是个秘密。 →2. 接形容词作表语 Whatever achievements you’ve made, you should remain modest. 无论你取得多么大的成就,你都该保持谦虚。 →3. 接介词短语作表语 He had to remain in hospital until he was better. 他不得不一直住院直到身体好些。→4. 接分词作表语 接过去分词作表语,表示主语所处的状态或已经发生的被动动作;现在分词作表语,表示正在进行的主动动作。 The guests came in, but she remained sitting at the desk reading.客人们都来了,但她还坐在写字台旁读书。 As before, he remained unmoved. 他和以往一样无动于衷。 二、用作不及物动词,意思是“剩下;剩余;遗留”,★★此时不能用进行时态,也没有被动语态★★ After the fire, very little remained of his house. 火灾过后,他的家所剩无几。 After the earthquake, very little remained of the city of Tangshan. 地震过后,唐山这座城市所剩无几。 三、指某事“尚待、有待于以后被处置”,后面常接不定式的被动形式,表示主语是不定式的承受者。 Many problems remain to be solved. 有好多问题尚待解决。 It remains to be seen whether you are right. 你是否正确,以后见分晓。 四、remain作名词 remain作名词时表示“剩余物”,一般用其复数形式。例如: The archeologists found some remains of the Song Dynasty.考古学家发现了一些宋代遗迹。 五、remaining的用法 remaining是形容词,意为“剩余的”,常作前置定语;而left则只能作后置定语。例如:There are still some apples left. 还剩余一些苹果。 I bought a gift for her with the remaining money. 我用剩余的钱给她买了一件礼物。

rman备份方法

以下都是使用rman增量备份,主要是从数据库大小和备份还原所用时间两个方面考虑。 0级备份表示数据库的全备份,默认不包括只读表空间。 1级备份表示小于等于1级备份以来的数据库变化情况。 2级备份表示小于等于2级别分以来数据库的变化情况。 3级,4级的意思和1级相似。 1、一月一次0级备份,两周一次1级备份,一周一次2级备份,每天一次3级备份。 此备份方案将备份时间分散,可以说是节省了备份的时间,而且节省了许多存储备份的空间,但是这造成还原时间增加了许多。 2、两周一次0级备份,一周一次1级备份,每天一次2级备份。 此备份方案相对方案2在备份时间上增长,还原时间缩短,存储备份的空间也相对有少量的增加。 3、一周一次0级备份,每天一次1级备份。 此方案平凡的对数据库进行全备份,占用操作系统的资源相对方案2和方案3大了很多,而且占用更多存储空间,但是此方案节省了很多恢复的时间。 数据库的备份方案选择主要调节备份和还原所用时间之间的平衡,使其对生产系统的影响降到最小。如果备份时间过长会长时间的占用I/O和内存资源,造成生产环境文件读取速度慢;如果还原时间太长,则拖延了系统恢复后正常上线的时间。对于现在的数据库系统,案2和方案3在备份时间上和方案4相差无几,在备份存储上比方案4节省不少,但是在还原时间上却大大超过方案4。 为了数据的安全性,建议不用方案1作为主要备份。而对于2,3,4,在实际生产环境中,根据现在数据库大小和每天产生的数据量大小的估计,方案4最适合。虽然平凡的0级备份对操作系统的资源占用很大,但是从测试的情况看,每次0级备份所发的时间是20分钟左右,1级备份所用的时间是6分钟左右,而且每次0级备份都在周末比较空闲的00:00进行,对生产环境的影响可以忽略不计。在备份存储方面,一次0级备份占用空间30G,每天1级备份占用空间是600M左右,一周的全部备份文件大小在120G左右,E盘存储空间大小正好适合于两周数据的存储,可以在1-2周手动的清理过期的备份集一次。 所以综合考虑,方案4最适合现在的生产环境。不过当数据库大小增加到200G以上时,0级备份时间与还原时间分配不平衡时,可以换用方案3;当数据库大小增加到1T以上时,可以考虑用方案2或者制定其他的方案。

remain的用法

remain后面接被动语态的动词不定式,表示“尚待”、“留待”remain的用法: 一、作不及物动词用 1.表示“剩下”、“仍有”,只能用于主动语态,不可直接跟宾语,eg.①、They had all those that remained.他们把剩下的全部拿走了。 ②、This visit willalways remain in my memory.这次拜访将永远留在我的记忆之中。 2.表示“留下”、“逗留”,特指在他人走后留下eg.①、They went,but I remained.他们走了,但我留了下来。 ②、I shall remain here all the winter.整个冬天我将留在这里。 3.表示“尚待”、“留待”,后面接被动语态的动词不定式eg.①One problem remains to be solved.有一个问题尚待解决。 ②That remains to be proved.那尚待证实。 二、作系动词用表示“一直保持”、“仍然(处于某种状态)”、“继续存在”、“依然” 1.后面接名词作表语eg.①、Language was,is and will remain the chief means of exchange of ideas.语言,过去、现在和将来依然是交流思想的主要工具。 ②、In spite of their quarrel,they remained the best friends.他们尽管吵过架,却仍不失为最好的朋友。 2.后面接形容词作表语eg.①.We must always rema in modest and prudent.我们必须经常保持谦虚、谨慎。 ②.Despite the danger,she re- mained calm.尽管危险,可她依然镇定自若。

C++ #pragma预处理命令

#pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma 指令: #pragma comment(lib,"XXX.lib") 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样。 #pragma comment(linker,"/ENTRY:main_function") 表示指定链接器选项/ENTRY:main_function #pragma once 表示这个文件只被包含一次 #pragma warning(disable:4705) 表示屏蔽警告4705 C和C++程序的每次执行都支持其所在的主机或操作系统所具有的一些独特的特点。例如,有些程序需要精确控制数据存放的内存区域或控制某个函数接收的参数。#pragma为编译器提供了一种在不同机器和操作系统上编译以保持C和C++完全兼容的方法。#pragma是由机器和相关的操作系统定义的,通常对每个编译器来说是不同的。 如果编译器遇到不认识的pragma指令,将给出警告信息,然后继续编译。Microsoft C and C++ 的编译器可识别以下指令:alloc_text,auto_inline,bss_seg,check_stack,code_seg,comment,component,conform,const_seg,data_seg,deprecated,fenv_access,float_control,fp_contract,function,hdrstop,include_alias,init_seg,inline_depth,inline_recursion,intrinsic,make_public,managed,message,omp,once,optimize,pack,pointers_to_members,pop_macro,push_macro,region, endregion,runtime_checks,section,setlocale,strict_gs_check,unmanaged,vtordisp,warning。其中conform,init_seg, pointers_to_members,vtordisp仅被C++编译器支持。 以下是常用的pragma指令的详细解释。 1.#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef 则是基于宏的。

局域网命令提示符大全

一局域网命令大全 1.最基本,最常用的,测试物理网络的 ping 192.168.0.8 -t ,参数-t是等待用户去中断测试 2.查看DNS、IP、Mac等 A.Win98:winipcfg B.Win2000以上:Ipconfig/all C.NSLOOKUP: C:\>nslookup Default Server: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.68 >server 202.99.41.2 则将DNS改为了41.2 > https://www.sodocs.net/doc/352555305.html, Server: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.68 Non-authoritative answer: Name: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.212 3.网络信使 Net send 计算机名/IP|* (广播) 传送内容,注意不能跨网段 net stop messenger 停止信使服务,也可以在面板-服务修改 net start messenger 开始信使服务 4.探测对方对方计算机名,所在的组、域及当前用户名(追捕的工作原理) ping -a IP -t ,只显示NetBios名 nbtstat -a 192.168.10.146 比较全的 https://www.sodocs.net/doc/352555305.html,stat -a 显示出你的计算机当前所开放的所有端口 netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等 6.探测arp绑定(动态和静态)列表,显示所有连接了我的计算机,显示对方IP和MAC地址arp -a 7.在代理服务器端 捆绑IP和MAC地址,解决局域网内盗用IP!: ARP -s 192.168.10.59 00 -50-ff-6c-08-75 解除网卡的IP与MAC地址的绑定: arp -d 网卡IP

#pragma data code ICCAVR的使用

#pragma data:code 在Keil中为了节省数据存储器的空间,通过“code”关键字来定义一个数组或字符串将被存储在程序存储器中: uchar code buffer[]={0,1,2,3,4,5}; uchar code string[]="Armoric" ; 而这类代码移值到ICCAVR上时是不能编译通过的。我们可以通过"const" 限定词来实现对存储器的分配: #pragma data:code const unsigned char buffer[]={0,1,2,3,4,5}; const unsigned char string[]="Armoric"; #pragma data:data 注意: 《1》使用ICCAVR6.31时,#pragma data :code ;#pragma data:data ; 这些语法时在"data:cod"、"data:data"字符串中间不能加空格,否则编译不能通过。 《2》const 在ICCAVR是一个扩展关键词,它与ANSIC标准有冲突,移值到其它的编译器使用时也需要修改相关的地方。 在ICCAVR中对数组和字符串的五种不同空间分配: const unsigned char buffer[]={0,1,2,3,4,5}; //buffer数组被分配在程序存储区中 const unsigned char string[]="Armoric" ; //stringp字符串被分配在程序存储区中 const unsigned char *pt //指针变量pt被分配在数据存储区中,指向程序存储区中的字符类型数据 unsigned char *const pt //指针变量pt被分配在程序存储区中,指向数据存储区中的字符类型数据 const unsigned char *const pt //指针变量pt被分配在程序存储区,指向程序存储区中的字符类型数据 unsigned char *pt //指针变量pt被分配在数据存储区中,指向数据存储区中的数据 请问#pragma data:code和#pragma data:data是什么意思? 前者表示:随后的数据将存贮在程序区,即FLASH区,此区只能存贮常量,比如表格之类。

windows计划任务命令

排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。 若要查看该命令语法,请单击以下命令: schtasks create 创建新的计划任务。 语法 schtasks/create/tn TaskName/tr TaskRun/sc schedule [/mo modifier] [/d day] [/m month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer[/u[domain\]user/p password]] [/ru{[Domain\]User| "System"} [/rp Password]] /? 参数 /tn TaskName 指定任务的名称。 /tr TaskRun 指定任务运行的程序或命令。键入可执行文件、脚本文件或批处理文件的完全合格的路径和文件名。如果忽略该路径,SchTasks.exe 将假定文件在Systemroot\System32 目录下。/sc schedule 指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。 值说明 MINUTE、HOURLY、DAILY、 WEEKLY、MONTHLY 指定计划的时间单位。 ONCE任务在指定的日期和时间运行一次。 ONSTART 任务在每次系统启动的时候运行。可以指定启动的日期,或下一次系统启动的时候运行任务。 ONLOGON 每当用户(任意用户)登录的时候,任务就运行。可以指定日期,或在下次用户登录的时候运行任务。 ONIDLE 只要系统空闲了指定的时间,任务就运行。可以指定日期,或在下次系统空闲的时候运行任务。 /mo modifier 指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。对于MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。 计划类 型 修饰符说明

pragma的用法

#pragma的用法 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义, 编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para。其中para为参数,下面来看一些常用的参数。 1)message 参数 message参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message("消息文本") 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有 没有正确的设置这些宏, 此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏, 可以用下面的方法: #ifdef _X86 #pragma message("_X86 macro activated!") #endif 我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示"_86 macro activated!"。 我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。 (2)另一个使用得比较多的pragma参数是code_seg 格式如: #pragma code_seg( ["section-name" [, "section-class"] ] ) 它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到 它。 (3)#pragma once (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上 在VC6中就已经有了, 但是考虑到兼容性并没有太多的使用它。 (4)#pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以 加快链接的速度, 但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文

Remain用法总结

Remain用法总结 一.remain 作为不及物动词vi,有两种意思,但都不能用进行时态,也没有被动语态:1、remain 表示“剩下”、“余下”、“遗留”,例如: Only a few leaves remained on the tree. 树上只剩下几片叶子了。 2、remain 表示“留下”、“停留”、“呆在”,相当于“stay”例如: The Smiths remained there all through the year.史密斯一家人在那里呆了整年。 二. remain作为系动词,表示“保持”、“仍然是”,“依旧是”,后接形容词、名词、动词不定式、现在分词、过去分词或介词形容词短语作表语,指某人或某事物仍保持某种状态。 He remained silent. 他保持沉默。(接形容词) It remained a secret. 这仍然是个秘密。(接名词作表语) 指某事尚待、有待于以后被处置,后面常接不定式的被动形式,表示主语是不定式的承受者。 A lot of work remained to be done.许多工作还有待完成。(接动词不定式) He had to remain in hospital until he was better. 他不得不一直住院直到身体好些。(接介词短语作表语) After the earthquake,very few houses remained standing.地震之后几乎没有房子还矗立着。(接现在分词作表语,表示正在进行的主动动作) As before, he remained unmoved. 他和以往一样无动于衷。(接过去分词作表语,表示主语所处的状态或已经发生的被动动作) 三、remains作为名词,表示“遗物”、“遗址”,“剩余物”,其单复数形式相同。 The remains of an old castle still stands there silently beside the river. 古城堡的遗址如今仍默默地矗立在河岸边。 The remains of the meal has been taken away. 剩饭菜都被拿走了。 The archeologists found some remains of the Song Dynasty. 考古学家发现了一些宋代遗迹。 四、remaining 是形容词,表示“剩下的”、“余下的”,修饰单个名词作定语,置于该名词之前作前置定语,与left同义,left必须置于被修饰的名词之后作后置定语,试比较:She returned home with the remaining 10 dollars. She returned home with the 10 dollars left. 她带着剩下的十美元回到了家。 五.Remain的一些常用词组 ~+名词 remain a bachelor 还是单身remain a complete mystery 一直是个谜remain a fisherman 仍是个渔民remain a little money 只剩一点点钱remain a little water 只剩一点水remain a question 还是一个问题remain a shining example 永远是闪光的榜样remain good friends 仍然是好朋友remain principles 保持原则remain the chief means 还是主要方式 ~+形容词 remain active 仍然活跃remain closed 仍然未开放remain confused 迷惑不解remain constant 保持不变remain expressionless 毫无表情remain hungry 只好饿着remain linked 还连在一起remain long 保持得很久remain modest 保持谦虚remain motionless 仍然不动remain prudent 保持谨慎remain silent 保持沉默remain unchanged 依然不变remain unconvinced 仍然不相信remain unfinished 仍然未完成remain unknown 依旧不详remain unsettled 仍然未解决 副词+~ always remain 仍然保持hardly remain 没剩下little remain 没剩下

计算机网络经典命令大全

计算机网络经典命令大全 1 .最基本,最常用的,测试物理网络的 ping 192.168.0.8 -t ,参数-t是等待用户去中断测试 2.查看DNS、IP、Mac等 A.Win98:winipcfg B.Win2000以上:Ipconfig/all C.NSLOOKUP:如查看河北的DNS C:\>nslookup Default Server: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.68 >server 202.99.41.2 则将DNS改为了41.2 > https://www.sodocs.net/doc/352555305.html, Server: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.68 Non-authoritative answer: Name: https://www.sodocs.net/doc/352555305.html, Address: 202.99.160.212 3.网络信使(经常有人问的~) Net send 计算机名/IP|* (广播) 传送内容,注意不能跨网段 net stop messenger 停止信使服务,也可以在面板-服务修改 net start messenger 开始信使服务 4.探测对方对方计算机名,所在的组、域及当前用户名(追捕的工作原理) ping -a IP -t ,只显示NetBios名 nbtstat -a 192.168.10.146 比较全的 https://www.sodocs.net/doc/352555305.html,stat -a 显示出你的计算机当前所开放的所有端口 netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等 6.探测arp绑定(动态和静态)列表,显示所有连接了我的计算机,显示对方IP和MAC地址arp -a 7.在代理服务器端

stm32中使用#pragma pack(非常有用的字节对齐用法说明)

#pragma pack(4) //按4字节对齐,但实际上由于结构体中单个成员的最大占用字节数为2字节,因此实际还是按2字节对齐 typedef struct { char buf[3];//buf[1]按1字节对齐,buf[2]按1字节对齐,由于buf[3]的下一成员word a是按两字节对齐,因此buf[3]按1字节对齐后,后面只需补一空字节 word a; //#pragma pack(4),取小值为2,按2字节对齐。 }kk; #pragma pack() //取消自定义字节对齐方式 对齐的原则是min(sizeof(word ),4)=2,因此是2字节对齐,而不是我们认为的4字节对齐。 这里有三点很重要: 1.每个成员分别按自己的方式对齐,并能最小化长度 2.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度 3.对齐后的结构体整体长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐 补充一下,对于数组,比如: char a[3];这种,它的对齐方式和分别写3个char是一样的.也就是说它还是按1个字节对齐. 如果写: typedef char Array3[3]; Array3这种类型的对齐方式还是按1个字节对齐,而不是按它的长度. 不论类型是什么,对齐的边界一定是1,2,4,8,16,32,64....中的一个. 声明: 整理自网络达人们的帖子,部分参照MSDN。 作用: 指定结构体、联合以及类成员的packing alignment; 语法: #pragma pack( [show] | [push | pop] [, identifier], n ) 说明: 1,pack提供数据声明级别的控制,对定义不起作用; 2,调用pack时不指定参数,n将被设成默认值; 3,一旦改变数据类型的alignment,直接效果就是占用memory的减少,但是performance会下降; 语法具体分析: 1,show:可选参数;显示当前packing aligment的字节数,以warning message的形式被显示; 2,push:可选参数;将当前指定的packing alignment数值进行压栈操作,这里的栈是the internal compiler stack,同时设置当前的packing alignment为n;如果n没有指定,则将当前的packing alignment数值压栈; 3,pop:可选参数;从internal compiler stack中删除最顶端的record;如果没有指定n,则当前栈顶record即为新的packing alignment 数值;如果指定了n,则n将成为新的packing aligment数值;如果指定了identifier,则internal compiler stack中的record都将被pop 直到identifier被找到,然后pop出identitier,同时设置packing alignment数值为当前栈顶的record;如果指定的identifier并不存在于internal compiler stack,则pop操作被忽略; 4,identifier:可选参数;当同push一起使用时,赋予当前被压入栈中的record一个名称;当同pop一起使用时,从internal compiler stack 中pop出所有的record直到identifier被pop出,如果identifier没有被找到,则忽略pop操作; 5,n:可选参数;指定packing的数值,以字节为单位;缺省数值是8,合法的数值分别是1、2、4、8、16。 重要规则: 1,复杂类型中各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个类型的地址相同; 2,每个成员分别对齐,即每个成员按自己的方式对齐,并最小化长度;规则就是每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数中较小的一个对齐; 3,结构体、联合体或者类的数据成员,第一个放在偏移为0的地方;以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度两个中比较小的那个进行;也就是说,当#pragma pack指定的值等于或者超过所有数据成员长度的时候,这个指定值的大小将不产生任何效果; 4,复杂类型(如结构体)整体的对齐是按照结构体中长度最大的数据成员和#pragma pack指定值之间较小的那个值进行;这样当数据成员为复杂类型(如结构体)时,可以最小化长度; 5,复杂类型(如结构体)整体长度的计算必须取所用过的所有对齐参数的整数倍,不够补空字节;也就是取所用过的所有对齐参数中最大的那个值的整数倍,因为对齐参数都是2的n次方;这样在处理数组时可以保证每一项都边界对齐; 对齐的算法:由于各个平台和编译器的不同,现以本人使用的gcc version 3.2.2编译器(32位x86平台)为例子,来讨论编译器对struct 数据结构中的各成员如何进行对齐的。 在相同的对齐方式下,结构体内部数据定义的顺序不同,结构体整体占据内存空间也不同,如下: 设结构体如下定义: struct A { int a; //a的自身对齐值为4,偏移地址为0x00~0x03,a的起始地址0x00满足0x00%4=0;

remain的用法小结

remain的用法小结 你们知道remain的用法吗?我们一起来学习学习吧,下面就和大家分享,来欣赏一下吧。 remain的用法 remain有名词和动词的词性。作名词有剩余物,残骸,遗迹等含义;作动词时,通常用作不及物动词和系动词,有保持不变,剩余等含义。 1remain的释义n. 剩余物,残骸;残余;遗迹;遗体 v. 仍然是; 保持不变; 剩余; 遗留; 继续存在; 仍需去做(或说、处理); 第三人称单数:remains 现在分词:remaining 过去式:remained 过去分词:remained 2remain的用法1.用作不及物动词 They went, but I remained. 他们走了,但我留了下来。 Hell remain to accompany you.

他将留下来陪你。 A number of problems remain to be solved. 有很多问题尚待解决。 还有一项更艰苦的工作需要我们做。 2.用作系动词 They remained good friends. 他们仍然是好朋友。 He will always remain a shining example for us all. 他永远是我们学习的光辉榜样。 His face remained expressionless. 他的脸上仍然毫无表情。 In spite of the danger they remained calm. 尽管有危险,但他们一直保持冷静。 We must always remain modest and prudent. 我们要经常保持谦虚谨慎。 He remained hanging in midair, saved by the belt.

Windows任务计划命令完整版资料

Wind ows任务计划命令 创建计划任务 语法 schtasks /create /sc ScheduleType /tn TaskName /tr TaskRun [/s Computer [/u [Domain]User [/p Password]]] [/ru {[Domain]User | System}] [/rp Password] [/mo Modifier] [/d Day[,Day...] | *] [/m Month[,Month...]] [/i IdleTime] [/st StartTime] [/ri Interval] [{/et EndTime | /du Duration} [/k]] [/sd StartDate] [/ed EndDate] [/it] [/Z] [/F] 参数 /sc ScheduleType指定计划类型。 有效值为MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY 指定计划的时间单位。 ONCE 任务在指定的日期和时间运行一次。 ONSTART 任务在每次系统启动的时候运行。可以指定启动的日期,或下一次系统启动的时候运行任务。 ONLOGON 每当用户(任意用户)登录的时候,任务就运行。可以指定日期,或在下次用户登录的时候运行任务。 ONIDLE 只要系统空闲了指定的时间,任务就运行。可以指定日期,或在下次系统空闲的时候运行任务。 /tn TaskName指定任务的名称。 系统上的每项任务都必须具有一个唯一的名称。名称必须符合文件名称规则,并且不得超过238 个字符。使用引号括起包含空格的名称。

#pragma指令用法汇总和解析

#pragma指令用法汇总和解析 一. message 参数。 message 它能够在编译信息输出窗 口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message(“消息文本”) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条 指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 #ifdef _X86 #pragma message(“_X86 macro activated!”) #endif 当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_ X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了 二. 另一个使用得比较多的#pragma参数是code_seg。格式如: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节 为.text节 如果code_seg没有带参数的话,则函数存放在.text节中 push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名 pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名 identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数) 表示函数存放的节名 例如: //默认情况下,函数被存放在.text节中 void func1() { // stored in .text } //将函数存放在.my_data1节中 #pragma code_seg(".my_data1") void func2() { // stored in my_data1 } //r1为标识符,将函数放入.my_data2节中 #pragma code_seg(push, r1, ".my_data2") void func3() { // stored in my_data2 } int main() { } 三. #pragma once (比较常用) 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次 四. #pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。

相关主题