#define MAX_STRING 256;
có nghĩa là:
bất cứ khi nào bạn tìm MAX_STRING khi tiền xử lý, thay thế nó với 256;
. Trong trường hợp của bạn, nó sẽ làm cho phương thức 2:
#include <stdio.h>
#include <stdlib.h>
#define MAX_STRING 256;
int main(void) {
char buffer [256;];
}
không phải là cú pháp hợp lệ.Thay
#define MAX_STRING 256;
với
#define MAX_STRING 256
Sự khác biệt giữa hai mã của bạn là trong phương pháp đầu tiên bạn khai báo một tương đương liên tục để 256
nhưng trong mã thứ hai bạn xác định MAX_STRING
đứng cho 256;
trong tập tin nguồn của bạn .
Chỉ thị #define được sử dụng để xác định giá trị hoặc macro được sử dụng bởi các tiền xử lý để thao tác mã nguồn chương trình trước khi nó được biên dịch. Bởi vì các định nghĩa tiền xử lý được thay thế trước khi trình biên dịch hoạt động trên mã nguồn, bất kỳ lỗi nào được giới thiệu bởi #define đều khó theo dõi.
Cú pháp là:
#define CONST_NAME VALUE
nếu có một ;
ở cuối, nó được xem như một phần của VALUE
.
để hiểu chính xác như thế nào #define
s làm việc, cố gắng xác định:
#define FOREVER for(;;)
...
FOREVER {
/perform something forever.
}
Thú nhận xét bởi John Hascall:
Hầu hết các trình biên dịch sẽ cung cấp cho bạn một cách để xem kết quả sau khi giai đoạn tiền xử lý, điều này có thể hỗ trợ với các vấn đề gỡ lỗi như thế này.
Trong gcc
nó có thể được thực hiện với cờ -E
.
Tháo; trong phương pháp 2 –
Xem đầu ra tiền xử lý và câu trả lời sẽ nhìn chằm chằm vào mặt bạn. –
@MichaelFoukarakis vâng, đó là cách dễ nhất 'cpp prog_name.c | tail' nói tất cả. – user51390233