comon.h解读:主要功能是读取数据文件所在的目录文件,并对文件中的数据格式进行统一化处理,方便进行后续的数据处理。
#pragma once一般由编译器提供保证:同一个文件不会被包含多次。这里所说的”同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。无法对一个头文件中的一段代码作#pragma once声明,而只能针对文件。
#include "math.h"中包含的函数说明:
#include<math.h>中包含的函数说明_若诗余的博客-CSDN博客_includemathh包含哪些库函数求取绝对值的函数intabs(int i);//返回整型数i的绝对值; 例如int abs(-3.5) == 3.5;//double cabs(struct complex znum);//返回复数znum绝对值;double fabs(double x);//返回双精度数x的绝对值;例如double fabs(-103.5) == 103.5;long labs(long n);//返回长整型n的绝...https://blog.csdn.net/weixin_44643510/article/details/111694169?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165951726416781432980783%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165951726416781432980783&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-111694169-null-null.142%5Ev39%5Econtrol&utm_term=%23include%20math.h&spm=1018.2226.3001.4187#include <chrono>:chrono处理时间和日期的库函数,chrono 库主要包含三种类型的类:时间间隔duration、时钟clocks、时间点time point。
C++ 使用 chrono 库处理日期和时间_程序员编程指南的博客-CSDN博客C++11 中提供了日期和时间相关的库 chrono,通过 chrono 库可以很方便地处理日期和时间,为程序的开发提供了便利。chrono 库主要包含三种类型的类:时间间隔duratio...https://blog.csdn.net/weixin_41055260/article/details/120124634?ops_request_misc=&request_id=&biz_id=102&utm_term=?ops_request_misc=&request_id=&biz_id=102&utm_term=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-120124634.142%5Ev39%5Econtrol&spm=1018.2226.3001.4187#include%20%3Cchrono%3E&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-120124634.142%5Ev39%5Econtrol#include <cstdlib>:是一些常用的函数,但是又不知道把它们放到哪里合适,因此就都放到了stdlib.h这个头文件中。
告诉编译器把stdio.h中的内容包含在当前程序中。
stdio.h是c编译器软件包的标准部分,它提供键盘输入和屏幕输出的支持。
#include <unistd.h>:
unistd.h是用于linux/unix系统的调用。
#include <unistd.h>是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。
#define,主要指代宏定义:
C++之constexpr详解_C咖咖的博客-CSDN博客_constexprconstexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化:constexpr int mf = 20; //20是常量表达式constexpr int limit = mf + 1; // mf + 1是常量表达式constexpr int sz = size(); //之后当siz...https://blog.csdn.net/janeqi1987/article/details/103542802?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-103542802-blog-110470363.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-103542802-blog-110470363.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2 C++中constexpr函数_棉猴的博客-CSDN博客_c++ constexpr1 简介constexpr函数指的是在编译的时候就能得到其返回值的函数,也就是说编译器将constexpr函数直接转换成其返回值,因此,constexpr函数都是被隐式地定义为内联函数。使用constexpr关键字来修饰constexpr函数。2 使用方法有如下代码:constexprintmyFunc(){ return1;}constexprinti = myFunc() * 4;此时,编译器会将myFunc()函数用其返回值1来代替,在编译时就可知i的值是4。...https://blog.csdn.net/hou09tian/article/details/110470363?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165952526516780357229164%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165952526516780357229164&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-110470363-null-null.142%5Ev39%5Econtrol&utm_term=constexpr&spm=1018.2226.3001.4187inline的用法:
inline的用法_Lzg_na的博客-CSDN博客_inline使用一、extern1、同一文件在.c或者.cpp文件中,可能有多个函数和变量。以main函数为例,在main函数内部定义的为局部变量/局部函数,只在函数体内生效;在main函数外部定义的为全部变量/全部函数,(当然也不能定义在其他函数体内),在本文件都生效,但是作用范围只在定义位置到结束,如果之前有函数要使用该变量会出错,那怎么使用呢?就是要使用extern关键字!!!如图所示,定义的m,这样在main函数里cout<<m使用会报错,在使用它之前添加extern int m;https://blog.csdn.net/qq_34799070/article/details/108117650?ops_request_misc=&request_id=&biz_id=102&utm_term=inline&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-108117650.142%5Ev39%5Econtrol&spm=1018.2226.3001.4187readlink()函数:
#pragma once
#include "math.h"
#include <chrono>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iostream>
#include <stdint.h>
#include <stdio.h>
#include <string>
#include <unistd.h>
//宏定义一些参数,简化输出部分的代码
#define SHOWDETAIL \
printf("\tline: %d;file: %s\n\tdate: %s %s\n", __LINE__, __FILE__, __DATE__, \
__TIME__)
#define LOGINFO(msg) printf("\033[32m[INFO] %s\033[0m\n", msg)
#define LOGWARN(msg) \
printf("\033[33m[WARN] %s\033[0m\n", msg); \
SHOWDETAIL
#define LOGERROR(msg) \
printf("\033[31m[ERROR] %s\033[0m\n", msg); \
SHOWDETAIL
#define LOG(type, msg) LOG##type(msg)
//利用constexpr构造一些常量,并且常量的值不会改变并且在编译过程就能得到计算结果的表达式。
constexpr uint32_t MONTH_DAY[2][13] = {
{365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{366, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
constexpr uint32_t SECOND_WEEK = 604800;
constexpr uint32_t SECOND_DAY = 86400;
constexpr uint32_t SECOND_HOUR = 3600;
constexpr uint32_t LEAP_SECOND = 18;
constexpr uint32_t TIME_ZONE = 8;
//构造一个内连函数,得到数据所在的目录路径
//readlink()函数用于得到想要的目录路径
//substr()函数用于提取字符串
//rfind()函数用于找到字符串所在的位置,并返回值
inline std::string GotProjectDir() {
// parse lidar config path
char abs_path[1024];
size_t cnt = readlink("/proc/self/exe", abs_path, 1024);
if (cnt < 1) {
LOG(ERROR, "got project dir failed!");
}
std::string project_path(abs_path);
project_path = project_path.substr(0, project_path.rfind("senseauto"));
return project_path;
};
//构造一个函数,得到一个时间段
class TicToc {
public:
TicToc() { tic(); }
void tic() { start = std::chrono::system_clock::now(); }
double toc() {
end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
return elapsed_seconds.count() * 1000;
}
private:
std::chrono::time_point<std::chrono::system_clock> start, end;
};
//构造一个内连函数,用于判断传入的数据是否满足相应的条件,满足:返回真值。
inline bool is_leap_year(uint32_t year) {
if (year % 4 == 0 && year % 100 != 0) {
return true;
} else if (year % 400 == 0) {
return true;
} else
return false;
};
构造一个内连函数,用于判断的数据是否满足条件,如果满足,直接返回;不满足,需要对数据进行处理。
inline std::string FormatSTDTimeString(const std::string &in_str) {
if (in_str.size() != 17 && in_str.size() != 23 && in_str.size() != 26) {
std::cout << "invalid input " << in_str << "(" << in_str.size()
<< ") format is yyyy-mm-dd-hh-mi-ss-ms or "
<< "yyyymmddhhmissms or yyyy-mm-dd-hh-mi-ss-us" << std::endl;
return in_str;
}
std::string out_str;
// format:yyyymmddhhmissms
if (in_str.size() == 17) {
out_str = in_str.substr(0, 4) + "-" + // yyyy
in_str.substr(4, 2) + "-" + // mm
in_str.substr(6, 2) + " " + // dd
in_str.substr(8, 2) + ":" + // hh
in_str.substr(10, 2) + ":" + // mi
in_str.substr(12, 2) + "." + // ss
in_str.substr(14, 3);
}
// format:yyyy-mm-dd-hh-mi-ss-ms
if (in_str.size() == 23 or in_str.size() == 26) {
out_str = in_str;
out_str[10] = ' ';
out_str[13] = out_str[16] = ':';
out_str[19] = '.';
}
return out_str;
};