现在位置: 首页 > c++
2014-10-30 06:51 工业·编程 ⁄ 共 4335字 评论 1 条
本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。 C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头文件和库文件分别升级,可执行文件是否受影响”这个意义下讨论,我称之为 library (主要是 shared library,即动态链接库)的 ABI (application binary interface)。至于编译器与操作系统的 ABI 留给下一篇谈 C++ 标准与实践的文章。 什么是二进制兼容性 在解释这个定义之前,先看...
阅读全文
版本管理(version controlling)是每个程序员的基本技能,C++ 程序员也不例外。版本管理的基本功能之一是追踪代码变化,让你能清楚地知道代码是如何一步步变成现在的这个样子,以及每次 check-in 都具体改动了哪些内部。无论是传统的集中式版本管理工具,如 Subversion,还是新型的分布式管理工具,如 Git/Hg,比较两个版本(revision)的差异都是其基本功能,即俗称“做一下 diff”。 diff 的输出是个窥孔(peephole),它的上下文有...
阅读全文
本文只考虑 Linux x86 平台,服务端开发(不考虑 Windows 的跨 DLL 内存分配释放问题)。本文假定读者知道 ::operator new() 和 ::operator delete() 是干什么的,与通常用的 new/delete 表达式有和区别和联系,这方面的知识可参考侯捷先生的文章《池内春秋》[1] ,或者这篇文章 。 C++ 的内存管理是个老生常谈的话题,我在《当析构函数遇到多线程 》第 7 节“插曲:系统地避免各种指针错误”中简单回顾了一些常见的问题以及在现...
阅读全文
匿名 namespace (anonymous namespace 或称 unnamed namespace) 是 C++ 的一项非常有用的功能,其主要目的是让该 namespace 中的成员(变量或函数)具有独一无二的全局名称,避免名字碰撞 (name collisions)。一般在编写 .cpp 文件时,如果需要写一些小的 helper 函数,我们常常会放到匿名 namespace 里。muduo 0.1.7 中的muduo/base/Date.cc 和 muduo/base/Thread.cc 等处就用到了匿名 namespace。 我最近在工作中遇到并重新思...
阅读全文
  在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。 例如,下面的结构各成员空间分配情况: struct test {   ...
阅读全文
其实能让c语言变得更强大的就是函数指针了,他可以让更少的代码做更多的事情,可以减少很多的重构成本....... 来看一个简单实用的例子: #include "stdio.h"  #include "stdlib.h"  #include "string.h"         int ReturnMaxValue(int left, int right)  {      return (left > right) ? left : right;  }...
阅读全文
2014-08-29 06:15 工业·编程 ⁄ 共 805字 暂无评论
我们知道,在C/C++语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short,int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。(或许当年该把这个类型叫做“byte”,然后现在就可以根据实际情况,使用byte 或short 来把char 通过typedef 定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得出它的10 进制或16 进制的ASCII 码值;反过来,使用”%c”打印一个整数,便可以...
阅读全文
2014-08-18 22:15 工业·编程 ⁄ 共 1469字 评论 1 条
Java语言和C++都是面向对象的编程语言。对于变量声明、参数传递、操作符、流控制等,Java使用了和C/C++相同的风格,使得熟悉C/C++的程序员能很方便地进行编程。同时,Java为了实现其简单、健壮、安全等特性,也摒弃了C和C++中许多不合理的内容。 相关阅读     ----Java与C#个人之比较 1.全局变量 Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。例如:...
阅读全文
2014-08-11 06:54 工业·编程 ⁄ 共 923字 暂无评论
在写程序时经常要进行字符串分离,我喜欢用strtok这种字符串解析函数。         strtok         原型 char *strtok(char s[], const char *delim);       功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。       说明:strtok()用来将字符串分割成一个个片段。参数s指向...
阅读全文
2014-08-10 06:47 工业·编程 ⁄ 共 557字 暂无评论
fflush(stdin) fflush(stdout) 用来强制刷新缓冲区数据。如果需要在每次i/o操作前后,不希望缓冲中存在历史数据或者不期望的数据或者为了清除缓存等的时候使用,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)。 个人感觉该函数在时钟显示方面可以起很大作用。 与fflush函数相似的一些C函数: system("pause");表示执行到此处要暂停,等待按任意...
阅读全文