日常开发笔记总结(八)

下列程序编译是否会报错:

// directive_1.c

#include <stdio.h>

#ifndef MIN

#define MIN(x, y) ((x) > (y) ? (y) : (x))

#endif /**/x

int main()

{

printf("min val = %d\n", MIN(100, -1));

return 0;

}

讲道理程序endif后面有个多余的x应该会编译失败,可是程序编译仅仅有个告警,运行正常。

[root c++]#gcc -g -Wall -o gcc gcc.c

gcc.c:6:12: warn......

日常开发笔记总结(七)

5月份迎来了今年最忙的一个时期,看mbp本周屏幕使用时间仅55分钟,今天难得不用跑装修相关的事情,得以坐在书桌前,随手翻几页书。

函数指针数组

//seq_array是个数组,内放函数指针

const vector<int *> (*seq_array[])(int) = {

fibon_seq, lucase_seq, pell_seq,

triang_seq, sequare_seq, pent_seq

};

这里其实可以使用typedef进行优化:

typedef const vector<unsigned int>* (*pfunc)(int);......

日常开发笔记总结(六)

信号安全函数

进程捕获到信号并对其进行处理时,进程正在执行的正常指令序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令。如果从信号处理程序中返回,则继续执行在捕获到信号时进程正在执行的正常的指令序列。有如下三类函数不能在信号处理程序中调用(非信号安全函数)

a)已知它们使用静态数据结构(如getpwnam函数)

b)它们调用malloc或free函数

c)标准I/O函数,标准I/O库的很多实现都以不可重入的方式使用全局数据结构。这里需要特别说明一点,书上或网上一些例子,信号处理函数中调用了printf,这里仅仅为了直观说明程序的运行,printf不能在信号处理函数中调用。

......

日常开发笔记总结(五)

周末在家收拾东西,找到一本刚入职时记的笔记,重新读一遍记录部分内容方便查阅。

获取下标为n的元素地址

当时记录在笔记本上旁边有个大大的问号,为何不使用下标形式呢?

#include <stdio.h>

//获取下标为n的元素地址

#define ELEM_PTR(base,n,esize) ((void *)(((char *)base + n*esize)))

int main()

{

int arr[] = {1,2,3,4,5,6,7,8,9,10};

printf("address of fifth elem = %p.\n",ELEM_PTR(arr,5,4......

日常开发笔记总结(四)

在geeksforgeeks上看到一篇介绍shared_ptr的文章,里面提到了Cyclic Dependency。

维基百科中也有详细的介绍Circular dependency

维基百科中提到一种循环依赖关系错误的例子:

a.h

#ifndef A_H

#define A_H

class B; //forward declaration

cl......

日常开发笔记总结(三)

拷贝赋值函数#include <string>

#include <iostream>

using namespace std;

class Person{

string name;

int age;

public:

Person(const string &name,int age):name(name),age(age){}

//拷贝构造和拷贝赋值函数

Person(const Person &p):name(p.name),age(p.age){}

Person& operator=(const Person &p)

{

cou......

日常开发笔记总结(二)

CTF-ALL-In_One笔记

看到朋友圈学弟推荐他舍友写的一套CTF学习路线,作为一名"安全"从业人员,个人觉得还是有必要静下心来好好学习。本文只记录一些相对不太熟或理解不深刻的知识点,并尽量辅之以实例。

CTF-ALL-In_One

apropos 命令

apropos [whatever] 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字

[root workspace]#apropos passwd

chgpasswd (8) - update group passwords in batch mode

chpasswd ......

日常开发笔记总结(一)

记录日常开发中的一些常用技巧,有的可能比较小,不适合专门写一篇文章,那么可以写在笔记总结系列里面。

scp命令用法发送目录到服务器

比如我想把一个目录下的所有文件发送到服务器中,以C-Thead-Pool为例:

bogon:github coder52$ scp -r C-Thread-Pool/ root@10.211.55.49:~

root@10.211.55.49's password:

LICENSE 100% 1090 592.0KB/s 00:00

thpool.h ......