2017-07-17 89 views
0

例如有C中#define和'='有什麼區別?

#define LIMIT 100 

int LIMIT= 100; 

什麼區別如果不是有在上可以使用任何使用場景中,但其他不能?

+3

其中需要 – StoryTeller

+0

整數表達式一個限定的預處理器的宏,而另一個限定了在任何情況下變量。預處理器宏用於*代替部分代碼,並且僅用於編譯時構造。變量作爲程序中的實體存在,並且可以在運行時更改值。如果您需要一個指向變量的指針,則不能使用宏。預期編譯時常量時不能使用變量。 –

+0

在第一種情況下,LIMIT是一個常數。在編譯之前它將被替換爲100。你也可以寫「const int LIMIT = 100;」聲明一個常量 – imoutidi

回答

1

第一個定義了一個preprocessor macro,在預處理過程中,它將在代碼中的任何位置替換爲它的值。

#define SIZE 4 

int main() { 
    int matrix_1[SIZE][SIZE] = { 0 }; 
    int* array = malloc(SIZE * sizeof(int)); 
    /* ... */ 
} 

SIZE的值在運行時無法更改。預處理上面的代碼將被更改爲以下之後:

int main() { 
    int matrix_1[4][4] = { 0 }; 
    int* array = malloc(4 * sizeof(int)); 
    /* ... */ 
} 

第二個初始化,這將在堆棧上分配的int變量和可以修改它的工作時間。

int main() { 
    int size = 4; 
    size = 12; /* size in now 12 */ 
    int* array = malloc(size * sizeof(int)); 
    /* ... */ 
} 

size不能在需要整數常量的上下文中使用,例如,作爲大小的比特字段的,作爲一個恆定enum的值,作爲一個switch語句的case標籤等

1

#define LIMIT 100限定LIMIT爲整數常數而int LIMIT= 100;它聲明爲整數變量。