在C編碼的一個常見情況是編寫返回指針的函數。如果在運行時寫入函數內發生錯誤,則可能會返回NULL以指示錯誤。 NULL就是特殊的內存地址0x0,它不會用於任何事情,而是用來指示特殊情況的發生。在各種平臺上的C指針地址跨度
我的問題是,有沒有其他的特殊內存地址永遠不會用於用戶級應用程序數據?
我想知道這個的原因是因爲它可以有效地用於錯誤處理。試想一下:
#include <stdlib.h>
#include <stdio.h>
#define ERROR_NULL 0x0
#define ERROR_ZERO 0x1
int *example(int *a) {
if (*a < 0)
return ERROR_NULL;
if (*a == 0)
return (void *) ERROR_ZERO;
return a;
}
int main(int argc, char **argv) {
if (argc != 2) return -1;
int *result;
int a = atoi(argv[1]);
switch ((int) (result = example(&a))) {
case ERROR_NULL:
printf("Below zero!\n");
break;
case ERROR_ZERO:
printf("Is zero!\n");
break;
default:
printf("Is %d!\n", *result);
break;
}
return 0;
}
知道這絕不會通過用戶模式應用程序使用可以有效地用於更有效和更清潔的條件處理地址的一些特殊的跨度。如果你瞭解這一點,它適用於哪些平臺?我想跨度將是操作系統特定的。我主要對Linux感興趣,但是對於OS X,Windows,Android和其他系統也很瞭解。
對於一個非常詳盡的解釋。 – Emanuel 2013-03-06 11:00:41