博文
[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指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数) 表示函数存放的节名例如://默认情况下,函数被存放在.text节中void func1() { // stored in .text}//将函数存放在.my_data1节中#pragma code_seg(".......
[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" ); // 显示文件的内容 system( "del aaa.txt" ); ......
[面试题]C/C++应聘常见面试试题深入剖析(转)(2007-07-13 13:51:00)
摘要:试题:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” 函数头是这样的:
//pStr是指向以'\0'结尾的字符串的指针//steps是要求移动的nvoid 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文件格式说明表
偏移地址
字节数
数据类型
内 容
文件头
00H
4
Char
"RIFF"标志
04H
4
int32
文件长度
08H
4
Char
"WAVE"标志
0CH
4
Char
"fmt"标志
10H
4
过渡字节(不定)
14H
2
int16
格式类别
16H
2
int1......
[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篇讲义是英文的,看来要补下英文了,不然看不懂。。。 ......
