6 守望之名

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 1w+

这才是现代C++单例模式简单又安全的写法

前言说到单例模式,很多人可能都已经很熟悉了,这也是面试常问的一个问题。对于单线程而言,单例的实现非常简单,而要写出一个线程安全的单例模式,曾经有很多种写法。有兴趣的可以参考这篇文章《单例模式很简单?你真的能写对吗》简单实现该文章中也提到,由于C++11及以后的版本中,默认静态变量初始化是线程安全的。The initialization of such a variable is defined to occur the first time control passes through its d

2020-09-06 21:53:15

C语言数组还能这么用?学到了!

来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng这个问题源于读者在阅读redis源码时的一个疑问。先看下面的代码,对于包含动态字符串成员的两个结构体Test0和Test1占用空间分别是多少呢?//来源:公众号【编程珠玑】//作者:守望先生#include<stdio.h>structTest0{inta;intb;char*c;};structTest1{inta;...

2020-08-29 20:28:29

32位程序和64位程序这些区别你知道吗?

我们在编写C/C++程序时,32位程序和64位程序的代码有何区别?如何编写既可以编译成32位程序又可以编译成64位程序的代码?代码上的区别实际上,对于32位程序和64位程序来说,代码上的区别不大,严格来说,甚至是一样的,它的主要区别在于一些基本数据类型占用的字节长度不一样(注:这里仅针对类Unix平台)类型 32位占用字节 64位占用字节 long 4 8 unsigned long 4 8 指针 4 8 当然这里的long包括一些

2020-06-26 09:14:00

神奇,C代码竟然能当成shell脚本一样“直接”执行!

前言我们都知道,写完了的C代码是需要编译链接之后才能运行的(也许你不需要手动点击编译,但是IDE可能帮你做了这件事),那么能不能让C代码像执行shell脚本或者Python脚本一样,直接可运行呢?类似于:$./main.c就可以直接运行了。看起来虽然没啥用,但是感觉有点小刺激。​小试牛刀对于文本内容,系统首先会尝试当成shell进行解释执行,这一点还不明白的朋友,建议先阅读《为什么执行命令开头需要./》。不过话又说回来,.c最终要编译成可执行文件,如果想要它直接...

2020-05-24 17:49:54

C语言数组下标-1你见过吗?

不知道你有没有见过-1作为数组下标的,我算是见到了。当然这一点在Python之类的语言中毫不稀奇。​下标-1的代码这里redis源码中的一部分:sdssdsMakeRoomFor(sdss,size_taddlen){void*sh,*newsh;size_tavail=sdsavail(s);size_tlen,newlen;chartype,oldtype=s[-1]&SDS_TYPE_MASK;...

2020-05-16 18:21:40

C语言为什么只需要包含stdio.h就能使用里面声明的函数?

​有人问:C语言为什么只需要include<stdio.h>就能使用里面声明的函数?这是一个看起来非常简单的问题,但是很多初学者,甚至学了很久的人都可能没有搞明白。为什么包含即可用?要明白包含即可用的原因,就必须讲到C语言代码是如何变成可执行文件的了,这里可以参考《hello程序是如何变成可执行文件的》。这里使用#include指令,在预编译之后,相当于把文件里面的内容都放到.c中了。//hello.c#include<stdio.h>intmai...

2020-05-10 21:23:46

如何在Linux下显示当前git分支

之前有读者在《Linux下如何优雅地修正命令?》中问到,如何在终端显示当前的git分支,实际上这就是自定义终端显示配置了。不过在直接介绍如何显示当前分支之前,来看看到底怎么回事。bashrc配置每次我们登录一个shell终端的时候,前面都有一些固定的显示信息:root@ubuntu:#这些显示信息其实可以配置的。我们打开用户家目录下的.bashrc文件,找到类似下面的关于...

2020-04-18 20:24:35

教你写出健壮可靠的shell脚本!

如果秉承着能跑就行的态度写shell脚本,是很自在的,但是如果你想要写出健壮,可靠的shell脚本,可没那么容易。那么有什么可操作的经验或者方法吗?语法检查第一个最简单的方法就是利用工具对脚本进行检查,这一部分已经在《有了这个神器,再也不怕shell写不对了》中介绍过了,它能最大程度地发现shell脚本中存在的语法错误,如果你还不知道,建议你绝对不要错过。而为了保证脚本健壮可靠,那么就...

2020-04-18 16:38:05

一行注释也能影响代码运行?别不信!

​来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng没想到吧,一行注释也能影响运行结果也许你在某个段子里听说过,某行注释删掉后,程序竟然不能预期执行?真的会这样么?你还别不信。见证“奇迹” 1//来源:公众号【编程珠玑】 2//作者:守望先生 3#include<stdio.h> 4#include<math....

2020-04-12 08:37:49

有了这个神器,再也不怕shell写得不对了

来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng​写过shell脚本的人都知道,即便出现一些简单的语法错误,运行的时候也可能没有办法发现。有些看似运行正确的脚本,实际上可能在某些分支,某些场景下仍然出现错误,而有的写法可能运行正常,但是却不符合POSIX标准,不具备可移植性。诚然,shell脚本是解释运行,没有办法向C/C++那样严格检查,但是我们...

2020-04-11 21:04:47

如何快速修正你的Linux命令?

​来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng如何快速纠正你的linux命令?我们在输入命令的时候,难免会出现输入命令错误,或者输入过多,过少的情况,那么除了各种按方向键退回之外,还有什么快速纠正命令的方法?本文用|表示光标位置。移动到命令开头举个例子,你准备执行一个命令:./test-axxx-bbbb|但是你输入...

2020-03-21 11:11:18

除了语言本身,程序员还应掌握哪些技能

​来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng前言作为C/C++开发,其语言的掌握自然是非常重要的,当然了,与此相关的算法,计算机基础,网络等知识也都是需要学习了解的,那么除此之外,还有哪些是建议掌握的呢?Linux这个我在《学Linux到底学什么》中已经说到过了,作为C/C++开发, 很大程度都是需要和Linux打交道的,既然如此,...

2020-03-21 11:03:29

高频面试题-如何交换两个变量值?办法没你想得那么多!

​来源:公众号【编程珠玑】作者:守望先生ID:shouwangxianshengC语言交换两个整型变量,你有哪些方法?那么多方法,又有哪几个可行?不可行的方法初学者最容易理解错的方法://来源:公众号【编程珠玑】//https://www.yanbinghu.com#include<stdio.h>voidswap(inta,intb){...

2020-01-11 20:32:58

解引用NULL会导致挂死?

来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng解引用NULL指针为什么会出错,导致程序挂死?或者说访问内存地址为0的位置为什么会视为非法?先了解NULL​参考《NULL,0,'\0'有何区别?》。解引用NULL解释问题之前,先描述问题。请看下面的代码://来源:公众号【编程珠玑】//https://www.yanbinghu...

2020-01-10 08:09:18

几个简单但你可能忽略的C知识点

C语言main函数的写法标准中,只有下面两种写法:intmain(void){/**body**/}以及intmain(intargc,char*argv[]){/**body**/}而C++的第二种与C类似,第一种是这样的:intmain(){/**body**/}参考《C语言的main函数到底该怎么写》​...

2020-01-04 08:53:00

换个角度说makefile

作为Linux下的C/C++开发者,没接触过makefile一定说不过去,通常构建大型的C/C++项目都离不开makefile,也许你使用的是cmake或者其他类似的工具,但它们的本质都是类似的。作为一个轻度使用者,应读者要求,斗胆介绍一下makefile,不过与普通的makfile教程不同的是,本文准备从另外一个角度来介绍。如有不妥之处,欢迎指出。makefie到底是什么在...

2020-01-04 08:46:57

多线程就一定快吗?天真!

​在《多线程排序》中介绍了多线程排序,似乎看起来多线程快了很多,然而多线程就一定更快吗?为什么多线程就不一定快?还是拿《多线程排序-真香!》中的程序举例,下面是各个线程数量的排序结果:线程数 时间/s 1 2.393644 2 1.367392 3 ...

2019-12-31 09:18:14

生成随机数的方式你选对了吗?

来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng生成随机数的N种方式首先需要说明的是,计算机中生成的随机数严格来说都是伪随机,即非真正的随机数,真正随机数的随机样本不可重现。那么我们来看看代码中有哪些方式可以生成随机数。randrand函数声明如下:#include<stdlib.h>intrand(void);...

2019-12-25 21:06:39

多线程排序-真香

​来源:公众号【编程珠玑】作者:守望先生ID:shouwangxiansheng在《系统编程-多线程》中已经了解了多线程的一些特点,其中包括快!那么今天就来看看如何利用多线程来排序。思路我们的思路是这样的: 假设有N个线程,则将数组数M据分为N组 每个线程对其中的一组数据使用库函数提供的快速排序算法 所有线程排序完成后,将每组排序好的数组合并 ...

2019-12-25 21:00:17

void*该如何理解?

原文地址:https://www.yanbinghu.com/2019/12/15/19682.html说到C就不得不提指针,而一提到指针,有一个是比较特殊的,那就是void*。void*到底是怎样的存在?​指针类型的含义在说明void*之前,先了解一下普通指针类型的含义。//来源:公众号【编程珠玑】//main.c#include<stdio.h...

2019-12-18 19:10:34

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 博客之星-入围
    博客之星-入围
    授予每年博客之星评选结果第21-200名的用户
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。