博文

[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指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被......

阅读全文(1309) | 评论:0

[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" ); // 显示文件的内容
             ......

阅读全文(2415) | 评论:0

[面试题]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文件格式说明表

......

阅读全文(1293) | 评论:0

[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()函数运行结束时,栈帧既消失,该函数中声明的所有变量就不会再占用内存了。。              堆:堆是一段完全独立于当前函数或栈帧的内存区。如果一个函数中声明了一些变量,而且希望当这个函数结束时其中声明的变量依然存在,就可以将这些变量置于堆中。堆与栈相比,没有那么清晰的结构性。可以把堆看作是一“堆”小玩艺。程序可以在任何时刻向这个“堆”添加新的东西或者修改“堆”中已经有的东西。            &......

阅读全文(2824) | 评论:0

[C/C++]编程入门必做的题(76个 转)(2007-07-13 13:47:00)

摘要: 编程入门必做的题(76 个) 很久没去论坛逛了,一进去就看到这个了,看题目,本来以为是些简单的题目,本来不想点的,不过后来还是忍不住点了看了,  一看才知道,原来不是些简单的题目,有很多都是些经典的题目。。。   诶,偶好久没有动过C/C++了,现在就来锻炼一下,坚持一天做一个,看会不会做。。。。。 第一,二题解题思路......

阅读全文(1588) | 评论:0

[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篇讲义是英文的,看来要补下英文了,不然看不懂。。。  ......

阅读全文(1817) | 评论:0