2017-07-17 271 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;它声明为整数变量。