C++ Project 积累 (1)

1. 不要在头文件中作定义.

packet.h 文件中定义了两个 map 和若干函数, packet.cpp 中引用 map 并实现函数, 本以为皆大欢喜.

main.cpp 中引入 packet.h 并调用一个函数测试, 报错, 重定义.

google , 未果, 想了一下, 忽然意识到 effective c++ 中讲到不要再头文件中作定义.

map 放到 packet.cpp , 编译报错, 需要在 main.cpp 中放入 extern 声明.

终于 work.

 

2. 昨晚抽空看了下 google c++ style

看的目的是想搞明白变量到底怎么去定义比较好, 但看完后觉得收货并不大. 我看过不少写的比较漂亮的源代码, 比如在 visual studio 中随便找到一个函数的定义会跳到该函数的定义, 写的真漂亮, 我今天看到 winsock.h 文件, 一个头文件 4000 多行, 写的真是工整, 但代码的 style google 推崇的相差甚远

总结了几条自己觉得还比较有用的 http://app.yinxiang.com/shard/s9/sh/4154986d-c12c-4201-a623-8d0bb8699483/c79e17566d4a047310d1bc04b112e06b

 

3. 时间类

Pcap 头中有 timeval 结构体

struct timeval  
{  
    long tv_sec; /*
*/  
    long tv_usec; /*
微秒*/  

};  

这个比较精确, 一般使用 time_t 就足够了, time_t unix 标准时间戳, 记录从 1970 到现在经过的秒数

另外, 直接存储年月日的是一个结构体 tm

struct tm  
{  
    int tm_sec;  /*
秒,正常范围0-59 但允许至61*/  
    int tm_min;  /*
分钟,0-59*/  
    int tm_hour; /*
小时, 0-23*/  
    int tm_mday; /*
日,即一个月中的第几天,1-31*/  
    int tm_mon;  /*
月, 从一月算起,0-11*/  1+p->tm_mon;  
    int tm_year;  /*
年, 1900至今已经多少年*/  1900 p->tm_year;  
    int tm_wday; /*
星期,一周中的第几天, 从星期日算起,0-6*/  
    int tm_yday; /*
从今年11日到目前的天数,范围0-365*/  
    int tm_isdst; /*
日光节约时间的旗标*/  
};  

常用用法

1) 已知 time_t, UTC 时间转化到当地时间并输出可读的时间格式

time_t ltime = 1346030160;

char buf[30] = {0};

struct tm *timeptr = localtime(&ltime);

strftime(buf,30,"%Y/%m/%d,%H:%M:%S \n" , timeptr);

printf(buf);

2) 标准用法, 获取时间

time_t timep;

time(&timep);

 

4. Boost filesystem 前面已经 POST

5. Winpcap 编程前面已经 POST

    

 

C++ Project 积累 (1),布布扣,bubuko.com

C++ Project 积累 (1)

上一篇:让JavaScript回归函数式编程的本质


下一篇:java公用方法:equals方法详解