细节总结

 

1、对函数来说:const char*型的参数和"psTag::ErrorInfo"字符串常量并无区别;即"psTag::ErrorInfo"型的实参,在调用函数端可以使用const char*型;

            int 型的实参,在调用函数端可以使用int& 引用型;但注意使用int常量"2"不行对一个const char*型的变量p来说,printf("%s"n", p)可将其内容全部输出,若使用printf("%c", *p)可输出其首字母。   

 

2、可变参数列表:类似 int printf(const char* format,);函数的参数列表,其并未规定其具体的参数个数,称为可变参数列表。在实现时通过va_startva_arg循环,可以一个一个地获得后续的参数。

 

3、在C++中,使用#include <iostream> using namespace std;#include <iostream>加上std:cout;可使用输入输出流(cout & cin)

 

4warning C4530C++异常,加上编译选项 /GX或者是/EHsc

   warning C4996VS2005不兼容之前版本函数,加#pragma warning(disable:4996)

 

5、初始化成员列表:在定义类时我们可以定义类的构造函数如下:

class HA_CommandHandler : public ACE_Task_Base

{

public:

            HA_CommandHandler(HA_Device_Repository& rep,

                        ACE_Condition<ACE_Thread_Mutex>& wait,

                        ACE_Thread_Mutex& rep_mutex)

                        : rep_(rep),waitCond_(wait),mutex_(rep_mutex)

            { }

   从而当我们定义该类的对象时,我们可以在定义对象时给以参数,从而实现构造功能。如:

   HA_CommandHandler handler1(rep, wait, rep_mutex);

   rep等参数为主函数中已经定义的变量,而rep_为类中定义的HA_Device_Repository&型变量,从而实现了对类中变量的赋值。

 

   也可采用的方式是:

HA_Device_Repository() : owner_(0)

{ }

   即定义时HA_Device_Repository rep;对象rep的成员变量owner_默认为0   

   

   在以下三种情况下使用初始化列表:需要初始化的成员是类对象、const(由于const型不能被赋值)、引用(引用类型必须在定义时赋值)

 

6int main(int argc, char *argv[]),用于接收外部参数,其中argc是指变量的个数,argv是一个char *的数组,其中存放变量的内容。

   在默认的情况下,argc = 1argv中存放的字符串是生成的exe文件的路径,如d://temp/test.exe.

   使用if (argc > 1)判断main函数的输入,当派生子进程时,argc = 2

 

7ACE_DEBUG的用法:

   输出单个语句:         ACE_DEBUG((LM_DEBUG, "%s", "Hello!"n"));     ///类似printf

   输出变量加语句:     ACE_DEBUG((LM_DEBUG, "aPtr is%x"n", aPtr));

   需要输出多个参数: ACE_DEBUG((LM_DEBUG, "aPtr is%x"nbPtr is%x"n", aPtr, bPtr));

   输出特殊的附加项:   ACE_DEBUG((LM_DEBUG, INFO_FORMAT, "Debug Error!"));

                                    #define INFO_FORMAT "%D@%M@%t@%l@%s"n"

                                    输出时间@级别@线程号@行号@后续字符串

                       

 

posted on 2008-10-10 14:11  王少敏  阅读(210)  评论(0)    收藏  举报

导航