编译程序能够检查出以下while 循环错放了一个分号:
/* memcpy 复制一个不重叠的内存块 */
void* memcpy(void* pvTo, void* pvFrom, size_t size)
{
byte* pbTo = (byte*)pvTo;
byte* pbFrom = (byte*)pvFrom;
while(size-->0);
*pbTo++ = *pbFrom++;
return(pvTo);
}
我们从程序的缩进情况就可以知道while 表达式后由的分号肯定是个错误,但编译程
序却认为这是一个完全合法的while 语句,其循环体为空语句。由于有时需要空语句,有
时不需要空语句,所以为了查出不需要的空语句,编译程序常常在遇到空语句时给出一条
可选的警告信息,自动警告你可能出了上面的错误。当确定需要用空语句时,你就用。但
最好用NULL 使其明显可见。例如:
char* strcpy(char* pchTo, char* pchFrom)
{
char* pchStart = pchTo;
while(*pchTo++ = *pchFrom++)
NULL;
Return(pchStart);
}
由于NULL 是个合法的C 表达式,所以这个程序没有间题。使用NULL 的更大好处在于
编译程序不会为NULL 语句生成任何的代码,因为NULL 只是个常量。这样,编译程序接受
显式的NULL 语句,但把隐式空语句自动地当作错误标出。