首页

更简洁,更优雅,但是很难看懂的代码  

似乎有些人将我几个月前的一篇文章的标题”更干净、更优雅、更错误”解释为对异常使用的一则引用。 (请看参考书目参考[35];请注意,引用者甚至将我的文章的标题改了!) 如你所看到的,今天文章的标题是对我从一本书中引用的一段代码,这本书的作者声称他提供的代码”更干净、更优雅”。 我指出,这段代码片段不仅更干净、更优雅,而且也是错误的。 你可以编写正确的基...

小技巧:OneDrive一直显示正在登录  

一直都使用OneDrive,最近发现不能正常登录了,现象是点开OneDrive,一直显示”正在登录”。 这可不行。 于是开动小脑筋,在网上找到方法并进行了测试,测试结果显示:方法有效。独乐乐不如众乐乐,现分享给大家。 只需要修改首要和次要DNS为:4.2.2.1 和 4.2.2.2 即可。 无需重启,稍微等待一会儿,OneDrive就可以登录了。 特此记录,防止以后记忆不好...

为什么Windows不再自动探测所有网络上的主机?  

Wes Haggard曾经希望Windows支持这样一种特性,即用户只需要简单地输入\,然后系统会自动的探测网络上所有的主机。 我们曾经做过这个功能 早在Windows 95时期,我们就实现了一种类似上面的功能。当用户打开网上邻居的时候,Windows会自动探测当前局域网上的所有主机。但是这项功能推出之后又很快被砍掉了,这是为什么? 拥有大型网络基础设施的企业对于这项功能有很大的抵触:因为枚举网络...

关于任务栏气球提示的超时时间问题  

大家可能看到如下图这样的提示窗口,我们叫它们气球提示,我细看了一下,嗯,确实有点气球的样子,特别是底下还牵着一根线。 在外壳中,有这样一个API: Shell_NotifyIcon,可能从API的名称上看不出它具体做什么。它的主要目的是:向任务栏的状态区域发送一条消息。它有两个参数: dwMessage: 用来指定需要执行何种操作。例如,可以是向任务栏添加/修改/删除一个图标。 lpDat...

VisualStudio: 在CMake工程中使用C++模块  

自从我们宣布微软C++编译器和Visual Studio开始支持C++模块以来,我们已经看到了开发者社区的热烈反响。从那个时候开始,就已经有人问什么时候可以支持CMake工程。 今天,我很高兴地宣布,Visual Studio 2022 17.2 预览版2已经包含了一项实验性更新,用来在CMake工程中支持C++模块。在这个早期版本中,你必须使用Visual Studio(MSBuild)代码生成...

使用Visual Studio进行远程macOS C++开发  

最新预览版本的Visual Studio已经可以下载了。那些希望在macOS上开发C++的开发者有福了:在最新版本中,开发者可以使用Visual Studio的CMake inux工具来在Mac平台上做C++开发。虽然需要在Mac上做一些准备工作才能开启这项支持,但是设置好之后,就可以将Mac当做任何其他远程Linux开发平台了。 安装 请先安装最新预览版本的Visual Studio 2022...

strncpy可能导致的缓冲区溢出问题  

如果你有幸阅读strncpy的文档,则你会发现它有一种很奇怪的行为,我们先看看下面的描述: 下面,我们分几种情况来讨论实际执行的结果: 为什么这个函数有如此怪异的行为?让我们回到 UNIX 的早期。 就我个人而言,我只能想到 System V的年代。在 System V 中,文件名最长可达 14 个字符。 任何更长的都被截断为 14 个字符。存储文件名的字段正好是 14 个字符,而不是 15....

为什么我不建议使用宏来控制代码流?  

平常的我基本不怎么生气,但有时候还是会忍不住。今天,我要特意指出一个让我感到不悦的地方:使用宏来对代码流进行控制。 对于宏来说,没有两个开发者会使用相同的宏,当你看到一些不太常见的宏调用时,如果你想弄明白代码的流程,你将不得不到头文件中仔细研究宏的定义。 特别是当你调试其他人编写的代码的时候。举个例子,如果在一段代码中,你看到一个进入临界区的代码,如果函数里面的代码只有return或者goto之类...

谈谈PulseEvent的缺陷  

PulseEvent这个是API会释放一个(如果手动重置开启的话,则是多个)正在等待事件对象的线程,并将事件对象设置一个”未设置”的状态。如果这个时候碰巧没有任何线程在等待这个事件,则事件除了被设置为”未设置”状态以外,不会发生任何其他事情。 但它的缺陷就在这里。 你怎么知道,你所认为的正在等待事件的线程就一定是”真的(正在等待)R...

使用纤程简化枚举器5:组合  

另一个关于枚举的高级玩法是组合,也就是说,一个枚举实际上是组合了其他多个枚举的结果。(在面向对象编程中,大家都对派生比较熟悉,实际上,组合也是面向对象编程中一个十分强大的概念,在之前关于上下文菜单的文章中我们就看到过组合,你应该还有点印象吧?) 在生产者驱动的枚举实现转给中,可以通过一个接一个地调用两个枚举函数来实现组合功能。 在消费者驱动的枚举器中,您可以通过将两个枚举器包装在一个大枚举器中来实...