番外-scope, linkage and storage class

在看 c-faq,和 c 或者 c++ 的 RFC 的时候,经常见到一些 scope, linkage 和 storage class 的字眼,让人摸不着头脑!这些概念,都是用来描述一个标识符(identifier)的,比如:变量标识符,函数标识符。下面就这些概念做一些说明:

scope

scope,字面意思就是范围。IBM 对 C 和 C++ 语言的定义文档中,对scope是这样描述的:

The scope of an identifier is the largest region of the program text in which the identifier can potentially be used to refer to its object. In C++, the object being referred to must be unique. However, the name to access the object, the identifier itself, can be reused. The meaning of the identifier depends upon the context in which the identifier is used. Scope is the general context used to distinguish the meanings of names.

阅读全文

1.10-静态变量与静态函数的声明与定义

对于一个静态变量或者静态函数,是不是每一处声明的地方,都需要包含 static 关键字呢?

事实上,编译器对变量和函数的处理是不同的。对于变量,如果你要声明一个静态变量,那么在第一次声明的时候,就必须要加上 static 关键字,且之后的所有的声明都必须加上 static 关键字,否则编译器会报错。例子如下:

1
2
3
4
5
6
7
int v1;
static int v2;
static int v3;

staic int v1;
int v2;
extern int v3;

阅读全文

在linux下利用Google的SMTP来发邮件

在维护服务器的时候,经常需要建立一个服务器错误预警系统,而邮件是一个很好的途径。

在 linux 下,一般是通过 mail 来写邮件,而传递默认使用 sendmail 服务。这样虽然能向外界发送邮件,但邮件不能回复,并且 sendmail 服务要求发送方是系统可识别用户,配置比较麻烦。下面通过使用 Google 的 SMTP 服务器来发送邮件,不但减轻服务器负担,而且可以使用类似的公共邮件地址来作为发送方。

下面所有步骤,全部基于 CentOS 6.3,其他发行版本类似。

阅读全文

MD5 算法实现

MD5 算法的标准文件见 RFC1321。这里说一下具体实现时,应该注意的地方。

LSB 和 MSB

其实,在官方文档中已经提到过这个,但是没注意,现把它摘抄如下:

In this document a “word” is a 32-bit quantity and a “byte” is an eight-bit quantity. A sequence of bits can be interpreted in a natural manner as a sequence of bytes, where each consecutive group of eight bits is interpreted as a byte with the high-order (most significant) bit of each byte listed first. Similarly, a sequence of bytes can be interpreted as a sequence of 32-bit words, where each consecutive group of four bytes is interpreted as a word with the low-order (least significant) byte given first.

阅读全文