符号 | 意义 |
static | 在函数内部,表示该变量的值在各个调用间一直保持延续性 在函数这一级,表示该函数只对本文件可见 |
extern | 用于函数定义,表示全局可见(属于冗余的) 用于变量,表示它在其他地方定义 |
void | 作为函数的返回类型,表示不返回任何值 在指针声明中,表示通用指针的类型 位于参数列表中,表示没有参数 |
* | 乘法运算符 用于指针,间接引用 在声明中,表示指针 |
& | 位的AND操作等 取地址操作符 |
= | 赋值符 |
== | 比较运算符 |
<= <<= | 小于等于运算符 左移复合赋值运算符 |
< | 小于运算符 #include 指令的左定界符 |
() | 在函数定义中,包围形式参数表。 调用一个函数。 改变表达式的运算次序 将值转换为其他类型(强制类型转换)。 定义带参数的宏。 包围sizeof操作符的操作数(如果它类型) |
除此之外,还有一些符号具有多个容易混淆的意思。有一位心里没底的程序员面对if(x>>4)这样的语曾经感到困感,问道“这是什么意思?它是不是表示大于4?”
重载存在问题之处如下面的语句所示:
p = N * sizeof * q;
你能不能马上推断出,这里是一个乘号还是两个?提示:接下去的一条语句是:
r = malloc(p);
答案是这里只有一个乘号,因为 sizeof 操作符把指针q 指向的东西(即*q)作为操作数它返回q所指向对象的类型的字节数,便于 malloc 函数分配内存。当 sizeof 的操作数是个类型名时,两边必须加上括号(这常常使人误以为它是个函数),但操作数如果是变量则不必加括号。
这里有一个更为复杂的例子:
apple = sizeof(int) * p;
这代表什么意思?是 int 的长度乘以p?或者是把知类型的指针 p 强制转换为 int,然后进行 sizeof 操作?或者还有其他更奇怪的解释?这里没有给出答案,要想成为一位熟练的程序员,必须要自己编写测试程序探索这类问题。请试试吧!看看是什么结果。你让一个符号所表达的意思越多,编译器就越难检测到这个符号在你的使用中所存在的异常情况。这并不像那些有烦恼的人那样在迪斯尼东园与奇异鸟一起歌唱就可解除烦恼。C语言似乎比其他语言更靠近标记歧义性的曲折边缘。