1.24-关于sizeof

sizeof 是 C 中的一个关键字,用来计算类型或者表达式的大小。

今天在看 faq 的时候,碰到一个问题,是说 sizeof 无法计算一个数组的大小,在编译的时候,就出现错误。不解,自己尝试着编写了一个例子,果然出现这个错误:

1
Error: invalid application of ‘sizeof’ to incomplete type ‘int[]’

阅读全文

番外-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;

阅读全文