博文
[Win编程]pragma指令简介(转)(2007-07-13 14:08:00)
摘要: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指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被......
[C]C实现定时删除文件(2007-07-13 13:55:00)
摘要:#include "stdio.h"
#include "string.h"
#include "time.h"
#include "stdlib.h"
int main( void )
{
char *strTime;
time_t myTime; // long型时间
bool isDel;
time( &myTime ); // 取得时间
strTime = ctime( &myTime ); // 转换为字符串
printf( "%s", strTime ); // 显示时间
isDel = false;
while( !isDel ) // 程序一直运行,直到删除了文件才结束次程序。
{
/* 如果为18:00点则删除文件 */
if ( ( strTime[11] == '1' ) && ( strTime[12] == '8' ) && ( strTime[14] == '0' ) && ( strTime[15] == '0' ) )
{
system( "type aaa.txt" ); // 显示文件的内容
 ......
[面试题]C/C++应聘常见面试试题深入剖析(转)(2007-07-13 13:51:00)
摘要:试题:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
函数头是这样的:
//pStr是指向以'\0'结尾的字符串的指针
//steps是要求移动的n
void LoopMove ( char * pStr, int steps )
{
//请填充...
}
解答:
正确解答1:
void LoopMove ( char *pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
strcpy ( tmp, pStr + n );
strcpy ( tmp + steps, pStr);
*( tmp + strlen ( pStr ) ) = '\0';
strcpy( pStr, tmp );
}
正确解答2:
void LoopMove ( char *pStr, int steps )
{
int n = strlen( pStr ) - steps;
char tmp[MAX_LEN];
memcpy( tmp, pStr + n, steps );
memcpy(pStr + steps, pStr, n );
memcpy(pStr, tmp, steps );
}
剖析:
这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。
最频繁被使用的库函数包括:
(1) strcpy
(2) memcpy
(3) memset
试题6:已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。
WAVE文件格式说明表
......
[C++]栈和堆原理介绍(2007-07-13 13:48:00)
摘要: C++应用中内存分为2部分,一部分是栈(stack,也称堆栈),另一部分是堆(heap)。
栈: 可以把栈看成是一叠卡片,最上面的卡片表示程序的当前作用域,这往往就是当前正在执行的函数。当前函数中声明的所有变量都置于栈顶帧中,即占用栈顶帧的内存,这就相当于一叠卡片中最上面的一张卡片。如果当前函数调用了另一个函数,举例来说,一开始一叠卡片位于最底的卡片是main()函数,main()函数调用了foo()函数,则相当于在这一叠卡片上加了另一张卡片,这样foo()函数就有了自己的栈帧(就是指一块内存空间)以供使用。从main()传递到foo()的所有参数都会从main()栈帧复制到foo()栈帧中。 然后foo()函数又调用了bar()函数,则在这一叠卡片上又加了一张卡片,这样bar()就有了自己的栈帧(stack frame)以供使用,从foo()传递到bar()的参数就会从foo()栈帧复制到bar()栈帧中。 图片如下: foo()函数声明了一个整数值。
栈帧很有意义,因为栈帧可以为每个函数提供一个独立的内存工作区。如果一个变量是在foo()栈帧中声明的,那么调用bar()函数不会对它带来改变,除非你专门要求修改这个变量。另外,foo()函数运行结束时,栈帧既消失,该函数中声明的所有变量就不会再占用内存了。。
堆:堆是一段完全独立于当前函数或栈帧的内存区。如果一个函数中声明了一些变量,而且希望当这个函数结束时其中声明的变量依然存在,就可以将这些变量置于堆中。堆与栈相比,没有那么清晰的结构性。可以把堆看作是一“堆”小玩艺。程序可以在任何时刻向这个“堆”添加新的东西或者修改“堆”中已经有的东西。
&......
[C/C++]编程入门必做的题(76个 转)(2007-07-13 13:47:00)
摘要:
编程入门必做的题(76 个)
很久没去论坛逛了,一进去就看到这个了,看题目,本来以为是些简单的题目,本来不想点的,不过后来还是忍不住点了看了, 一看才知道,原来不是些简单的题目,有很多都是些经典的题目。。。 诶,偶好久没有动过C/C++了,现在就来锻炼一下,坚持一天做一个,看会不会做。。。。。
第一,二题解题思路......
[C++]2005“现代C++设计与编程”讲师讲义下载(2007-07-13 13:46:00)
摘要:2005 "现代C++设计与编程" 技术大会 讲师讲义开放下载:
Bjarne Stroustrup
《Direction for C++0x》
云风
《游戏的优化》
孟岩
《什么是高级C++》
荣耀
《C++模板元编程技术与应用》
陈榕
《面向目标代码编程与C++的未来》
李建忠
《C++/CLI:建立本地世界与托管世界互通的桥梁》
张银奎
《C++异常处理得与失》
温昱
《架构设计:策略与过程》
何宗键
《C++在嵌入式系统中的运用》
鲍志云
《用C++开发高性能服务器端网络应用程序》
黄飞龙
《多核技术与C++并发编程》
王旭
《基于C++的网游服务器中间件模型》因牵扯到相关公司机密,不便公开。
有2,3篇讲义是英文的,看来要补下英文了,不然看不懂。。。 ......