守望的个人博客

编程珠玑


  • 首页

  • 关于

  • 分类

  • Linux

  • C

  • C++

  • 数据结构与算法

  • 书籍

  • GDB调试指南

  • 搜索

scanf高级用法

发表于 2020-12-12 | 更新于: 2020-12-13 | 分类于 C | 阅读次数:

不知道你有没有看到过scanf下面这样的用法:

1
2
3
4
5
6
7
8
9
10
// 来源:公众号【编程珠玑】
// 作者:守望先生
#include<stdio.h>
int main(void)
{
char a[128] = {0};
scanf("%[0-9]",a);
printf("%s\n",a);
return 0;
}

上面的代码什么意思呢?试一下几个输入输出:

阅读全文 »

API设计原则-避免暴露数据成员

发表于 2020-11-07 | 更新于: 2020-11-07 | 分类于 设计模式 | 阅读次数:

之前在《PIMPL-隐藏接口实现细节》中介绍了一种隐藏类的私有成员的方法,或者说隐藏接口实现细节的方法-PIMPL。
假设提供的接口的入参比较复杂,可能有人会考虑使用结构体作为入参。当你考虑这么做的时候,灾难也将会随之而来……

阅读全文 »

PIMPL-隐藏接口实现细节

发表于 2020-11-06 | 更新于: 2020-11-07 | 分类于 设计模式 | 阅读次数:

前言

有时候我们需要提供对外的API,通常会以头文件的形式提供。举个简单的例子:
提供一个从某个指定数开始打印的接口,

阅读全文 »

const修饰的变量无法被外部引用

发表于 2020-11-01 | 更新于: 2020-11-07 | 分类于 Cpp | 阅读次数:

const变量能被其他文件extern引用吗?为什么?

先来看一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 来源:公众号编程珠玑
// main.cc
#include<stdio.h>
// 引用外部定义的const_int变量
extern const int const_int;
int main()
{
printf("const_int:%d\n",const_int);
return 0;
}
// const.cc
// 定义const 变量
const int const_int = 10;

编译链接:

1
2
3
4
 $ g++ -o main main.cc const.cc
/tmp/ccWHAXxB.o: In function `main':
main.cc:(.text+0x6): undefined reference to `const_int'
collect2: error: ld returned 1 exit status

我们发现出现了链接问题,说const_int没有定义的引用,但我们确实在const.cc文件中定义了。

我们去掉const修饰符再编译一次,发现是可以的。从上面这个编译问题,就引出今天要讲的内容了。至于为什么会编译不过,最后再做解释。

当然你会发现,按照C代码去编译,是可以编译出来的。后面再解释。

阅读全文 »

daemon程序实现注意事项

发表于 2020-10-06 | 更新于: 2020-10-09 | 分类于 linux | 阅读次数:

之前在《如何让程序真正地后台运行》一文中提到了程序后台运行的写法,但是里面的示例程序在某些场景下是会有问题的,这里先不说什么问题,我们先看看这个磁盘满的问题是怎么产生的,通过这篇文章你将会学习到大量linux命令的实操使用。

阅读全文 »

性能优化-发现性能问题

发表于 2020-08-22 | 更新于: 2020-12-20 | 分类于 性能优化 | 阅读次数:

为了取得程序的一丁点性能提升而大幅度增加技术的复杂性和晦涩性能,这个买卖做不得,这不仅仅是因为复杂的代码容器滋生bug,也因为他会使日后的阅读和维护工作要更加艰难。《Unix编程艺术》

为什么要性能优化

也许是想要支持更高的吞吐量,想要更小的延迟,或者提高资源的利用率等,这些都是性能优化的目标之一。不过需要提醒的是,不要过早的进行性能优化。如果当前并没有任何性能问题,又何必耗费这个精力呢?当前一些有助于提高性能的编码习惯还是可以时刻保持的。

阅读全文 »

makefile入门

发表于 2019-12-29 | 更新于: 2021-02-17 | 分类于 编译链接 | 阅读次数:

作为Linux下的C/C++开发者,没接触过makefile一定说不过去,通常构建大型的C/C++项目都离不开makefile,也许你使用的是cmake或者其他类似的工具,但它们的本质都是类似的。

作为一个轻度使用者,应读者要求,斗胆介绍一下makefile,不过与普通的makfile教程不同的是,本文准备从另外一个角度来介绍。如有不妥之处,欢迎指出。

阅读全文 »

多线程一定更快吗

发表于 2019-12-25 | 更新于: 2020-10-05 | 分类于 C | 阅读次数:

在《多线程排序》中介绍了多线程排序,似乎看起来多线程快了很多,然而多线程就一定更快吗?

阅读全文 »

多线程排序

发表于 2019-12-23 | 更新于: 2020-10-05 | 分类于 C | 阅读次数:

在《系统编程-多线程》中已经了解了多线程的一些特点,其中包括快!那么今天就来看看如何利用多线程来排序。

阅读全文 »

C语言生成随机数

发表于 2019-12-22 | 更新于: 2020-10-05 | 分类于 C | 阅读次数:

首先需要说明的是,计算机中生成的随机数严格来说都是伪随机,即非真正的随机数,真正随机数的随机样本不可重现。那么我们来看看代码中有哪些方式可以生成随机数。

阅读全文 »

123…20
守望

守望

193 日志
25 分类
81 标签
RSS
E-Mail 公众号
友情链接
  • Java知音
  • EmbeddedDevelop

目录

  • C50
  • Cpp16
  • Go1
  • Shell2
  • gdb6
  • hexo5
  • leetcode4
  • linux43
  • lua1
  • python2
  • redis3
  • resource2
  • vim3
  • windows1
  • 单元测试3
  • 工作面试1
  • 工具3
  • 性能优化2
  • 数据库1
  • 数据结构与算法15
  • 程序员4
  • 编译链接8
  • 网络编程5
  • 设计模式2
  • 读书10
© 2016 — 2021 守望
由 Hexo 强力驱动
|
主题 — NexT.Mist