
c/c++
不闻窗外事
学无止境
展开
-
vscode远端无法追踪代码以及如何使用VSIX
今天配置vscode 的远端功能后,无法追踪代码,而且有个报错,显示:Downloading package ‘C/C++ language components (Windows)‘ Failed. Retrying... Failed. Retrying...解决办法是从https://github.com/microsoft/vscode-cpptools/releases这里下载需要的包然后使用vscode的从VSIX安装,左键扩展旁边的三个点,就可以看到从VSIX安装,之后选择刚...原创 2020-12-03 18:09:58 · 1726 阅读 · 1 评论 -
超简单计算器的C++实现,只支持加减乘除和括号
#include <string>#include <iostream>#include <stack>#include <vector>#include <map>#include <assert.h>using namespace std;string strip(const string &s, const string &chars = ""){ if (s.empty()) .原创 2020-11-25 13:29:14 · 1956 阅读 · 0 评论 -
使用prctl为线程命名
使用prctl的PR_SET_NAME选项功能可以为线程命名,测试代码如下:#include <stdio.h>#include <pthread.h>#include <sys/prctl.h>#include <unistd.h>void *func1(void *arg){ prctl(PR_SET_NAME, "func1"); pause();}void *func2(void *arg){ prct原创 2020-10-12 10:02:44 · 1440 阅读 · 2 评论 -
使用C++实现的简单ini文件操作
因为经常使用配置文件,为了方便之后的使用,决定自己写一个功能比较齐全的操作ini类型的配置文件,因为是在linux 环境使用,所以是针对linux系统的文件。写代码加上测试,花了几天时间,博客记录一波。水平有限,可能有不少问题,希望大佬可以指正。如果有人想使用,一定要自己好好测试。。。代码分为两个文件,头文件iniparser.h代码如下:/*[section] //section 段key = value //item程序说明: 1、本程序提供的返回值为int类原创 2020-08-30 20:50:24 · 1827 阅读 · 0 评论 -
C++实现的简单线程池
最近学习了一些线程池方面的内容,根据学习的内容,使用C++,基于pthread线程库实现了一个简单线程池,水平有限,可能存在很多不足,代码如下threadpool.cpp#include "threadpool.h"#include <stdio.h>#include <pthread.h>#include <stdlib.h>CThreadPool::CThreadPool(const std::string &name) : m.原创 2020-08-24 18:20:23 · 225 阅读 · 0 评论 -
求大于等于某个数的最小的二次幂
郑钢的《自制编程语言》中的一段代码:uint32_t ceilToPowerOf2(uint32_t v) { v += (v == 0); v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; ...原创 2020-03-17 09:18:35 · 214 阅读 · 0 评论 -
stringtoint c++
static int string_to_int(const string &s){ if (s.empty()) { printf("rd_string_to_int string is empty\n"); return -1; } for (size_t i = 0; i < s.size(); i++) ...原创 2019-12-10 10:27:20 · 360 阅读 · 0 评论 -
c++ join
static string string_join(const vector<string> &vs, const string &delim){ string s; vector<string>::const_iterator citer = vs.begin(); while (citer != vs.end()) { s += *ci...原创 2019-12-04 14:46:57 · 802 阅读 · 0 评论 -
关于多线程与信号使用锁的问题
在多线程程序中使用信号处理程序的时候,一定要注意,信号处理函数中一定不能使用锁,信号处理函数应该尽可能的简单,最好只是对于一些标志位的赋值,然后再其他线程中,对标志位进行轮询查看,在线程中处理更多的逻辑。先上程序#include <stdio.h>#include <pthread.h>#include <signal.h>#define THRE...原创 2019-11-06 13:31:13 · 2439 阅读 · 0 评论 -
关于scanf输入需要注意回车的问题
先上代码#include <stdio.h>int main(){ char buf_1[256]; char buf_2[256]; scanf("%s", buf_1); scanf("%s", buf_2); printf("buf_1=[%s] buf_2=[%s]\n", buf_1, buf_2); return 0;}运行结果如下:...原创 2019-11-05 09:08:56 · 4912 阅读 · 0 评论 -
运算符的优先级
运算符(优先级从高至低) 结合律 () 从左往右 - + ++ -- sizeof 从右往左 * / % 从左往右 + - 从左往右 < > <= >= 从左往右 == != 从左往右 = 从右往左 ...原创 2019-10-28 10:29:26 · 141 阅读 · 0 评论 -
C++迭代器类别
迭代器可以分为以下五种:输入迭代器--------------------只读,不写;单遍扫描,只能递增 输出迭代器--------------------只写,不读;单遍扫描,只能递增 前向迭代器--------------------可读写;多遍扫描,只能递增 双向迭代器--------------------可读写;多遍扫描,可递增递减 随机访问迭代器--------------...原创 2019-05-28 19:07:08 · 493 阅读 · 0 评论 -
c语言变参宏和利用变参宏的一些简单的打印实现
一些函数(如printf)接受数量可变的参数。stdvar.h头文件提供了工具,让用户自定义带可变参数的函数。通过把宏参数列表中最后的参数写成省略号(即3个点...)来实现这一功能。这样,预定义宏__VA_ARGS__可用在替换部分中,表明省略号代表什么。举个例子:#define LOG(...) printf(__VA_ARGS__)int main(){ LOG("hello\n"...原创 2019-05-27 18:57:00 · 1567 阅读 · 0 评论 -
sizeof("-2147483648") - 1和sizeof("-9223372036854775808") -1
在看zlog代码的时候,看到这两个宏定义#define ZLOG_INT32_LEN sizeof("-2147483648") - 1#define ZLOG_INT64_LEN sizeof("-9223372036854775808") - 1感觉有些懵逼,获取int32位的长度不应该是sizeof(-2147483648)这样吗,为什么用字符串,后来想了一下,原来这个地...原创 2019-05-16 09:09:06 · 563 阅读 · 0 评论 -
c++ const限定符
const限定符:1、当某个变量不希望被改变时,使用const限定符,例如:const int i = 5;将i定义为常量,不可修改。因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。初始化方式可以是多样的:const int i = get_value(); //运行时初始化const int i = 2;//编译时初始化2、c和c++的const区别...原创 2019-05-20 17:36:58 · 239 阅读 · 0 评论 -
向string类型参数的函数传递char *类型实参
1、向string类型传递char *#include <string>#include <iostream>using namespace std;void test(string str){ cout << str.size() << endl;}int main(){ //char *line = "hello"; ...原创 2019-05-20 13:27:59 · 4630 阅读 · 1 评论 -
为什么程序员无法分清万圣节和圣诞节
万圣节:10月30日(其实应该是万圣节前夜,因为实际万圣节是11月01日)圣诞节:12月25日10月:October(Oct)12月:December(Dec)Oct->Octal 八进制Dec->Decimalism 十进制10月30日->八进制的3012月25日->十进制的25而八进制的30恰恰等于十进制的25,所以这两个值是相同的...原创 2019-04-08 19:56:38 · 1098 阅读 · 1 评论 -
关于以函数名作为参数时调用问题
程序如下:#include <stdio.h>int add_fun(int a, int b){ return a + b;}int add(int a, int b, int (*add_ret)(int a, int b)){ printf("add_ret = %p\n", add_ret); printf("*add_ret = %p\n", *add_...原创 2018-05-09 10:46:20 · 2001 阅读 · 0 评论 -
关于数组名和对数组取地址的问题
代码:#include <stdio.h>int main(){ int arr[10] = {0}; printf("arr = %p\n", arr); printf("&arr = %p\n", &arr); getchar();}结果:arr = 0036FD94&arr = 0036FD94数组名表示数组的首地址,对数组取地址表示数...原创 2018-05-09 11:20:16 · 299 阅读 · 0 评论 -
关于strtok、strtok_r和strsep的速度问题
之前查strtok和strsep函数时,看到了这么一段话: 下面的说明摘自于最新的Linux内核2.6.29,说明了strtok()已经不再使用,由速度更快的strsep()代替。/** linux/lib/string.c** Copyright (C) 1991, 1992 Linus Torvalds*/ /** stupid library routines.. The...原创 2018-08-02 14:26:20 · 753 阅读 · 0 评论 -
包含时间、行号、文件名等信息的打印
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <unistd.h>#include <sys/types.h>#include <errno.h>#include <string.h>#define debug_out(原创 2018-08-07 10:48:09 · 340 阅读 · 0 评论 -
select函数当对端关闭后的状态
struct timeval timeout = {5, 0}; rset = allset; nready = select(maxfd + 1, &rset, NULL, NULL, &timeout);当使用select等待客户端发送数据时,如果客户端断开了连接,无论是主动close还是程序挂掉了,这时候select都...原创 2018-08-07 18:03:09 · 3474 阅读 · 4 评论 -
关于malloc的返回地址
之前没注意过malloc的返回值,今天又看到了这个地址空间说明,根据《LINUX/UNIX系统编程手册》的说明,当使用malloc申请比较小的空间时,返回值应该位于0x40000000以内,而当malloc申请的空间比较大时,会使用mmap的私有匿名映射实现,所以malloc的返回值应该大于0x40000000,于是写了一个简单的程序,发现确实是这样,程序入下:#include <...原创 2018-09-03 13:53:17 · 2985 阅读 · 0 评论 -
通过路径的方式对树进行增删改查
最近需要写一个树,通过路径的方式对树进行增删改查,但是在网上很少有以路径的方式对树进行操作的例子,所以周末自己写了一下,实现了增删改查接口以及测试程序。下面是一些介绍1、树的结构体//树的节点结构体struct NODE{ char name[NAME_LEN]; //节点名字 char pathname[PATH_LEN]; //该节点在树中的绝对路径...原创 2018-10-21 15:11:01 · 236 阅读 · 0 评论 -
关于cmdline文件的中的执行命令
linux文件/proc下的进程信息中,有一个cmdline文件,该文件中保持了本进程的执行命令,但是该文件中的命令比较有意思的是,当启动进程时含有参数时,会在各个参数中使用 字符'\0'进行分割,所以如何直接打印该命令,只能打印出第一个参数,即进程名,如果想打印全部参数,需要把各个参数的'\0'字符转为空格,就可以打印了。可以使用如下函数得到该命令int get_command(pid...原创 2018-11-23 13:55:02 · 2430 阅读 · 0 评论 -
c++的多态性
OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多种形式”。我们把具有继承关系的多个类型称为多态类型,因为我们能使用这些类型的“多种形式”而无须在意他们的差异。引用或指针的静态类型与动态类型不同这一事实正是C++语言支持多态性的根本所在。当我们使用基类的引用或指针调用基类中定义的一个函数时,我们并不知道该函数真正作用的对象是什么类型,因为它可能是一个基类...原创 2019-03-05 16:44:13 · 196 阅读 · 0 评论 -
左值和右值,左值引用和右值引用
左值(lvalue)这一术语来源于C语言,用来指代那些可以用在赋值表达式左侧的东西,具名对象、在栈和堆上分配的对象,或者其他对象的成员,总之就是又确定存储空间的东西。而术语右值(rvalue)也是源自C语言,指的是只能在赋值表达式右侧出现的东西,如字面值和临时对象。只能绑定到左值,不能绑定到右值的引用是左值引用。只能绑定到右值,而不能绑定到左值的引用是右值引用。举个例子:int a =...原创 2019-04-06 14:25:46 · 909 阅读 · 1 评论 -
C++ defaulted函数
默认的(defaulted)函数允许你允许你告诉编译器必须为你编写这个函数,作为其“默认”实现。当然,你只能对编译器可以自动生成的函数这样做,包括默认构造函数、析构函数、拷贝构造函数、移动构造函数、拷贝赋值操作符和移动赋值操作符。使用该函数的原因:为了改变函数的可访问性。在默认情况下,编译器生成的函数是public的。如果你希望将它们变为protected或者private,你就得亲自去...原创 2019-04-07 11:19:22 · 362 阅读 · 0 评论 -
#define和typedef的区别
typedef是为类型引入新的名字,跟#define相似的地方是,它们在程序中的存在很多时候都是为了程序的可读性。通过使用typedef获得的是一种彻底的“封装”类型--在声明它之后不能再往里面增加别的东西。typedef和#define的区别体现在两个方面:可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能。例如: #define pe...原创 2019-04-08 19:40:01 · 147 阅读 · 0 评论 -
再写dll 关于declspec(dllexport)和declspec(dllimport)
转载自:http://blog.sina.com.cn/s/blog_a7e72e940101izkh.html使用api 要先懂得怎么使用dll文件;1.新建一个常规dll //dll.h#ifndef DLL_H#define DLL_H#ifdef DLL_EXPORTS#define DLLEXPORT __declspec(dllexport)#e转载 2017-08-21 08:56:01 · 391 阅读 · 0 评论