2014-07-18 22 views
6

Câu hỏi đặt ra trong đầu bạn bằng cách xem xét cơ chế phát hiện rò rỉ bộ nhớ trong VS. Có mã boilerplate sau là cần thiết:Tôi có thể xác định macro xác định macro không?

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 

nhưng thay thế mã này với DETECT_MLEAKS:

#define DETECT_MLEAKS\ 
#define _CRTDBG_MAP_ALLOC\ 
#include <stdlib.h>\ 
#include <crtdbg.h>\ 

không thể được thực hiện.

Có cách giải quyết nào không?

+8

Bạn có thể đặt những dòng đó (và một trình bao) trong detect_memleaks.h và thay vào đó '#include" detect_memleaks.h "'. .. – slazyk

Trả lời

4

Trong ngôn ngữ C chuẩn, macro không thể tạo chỉ thị tiền xử lý. Ví dụ trong các tiêu chuẩn ISO 9899: 1999 tiêu chuẩn:

6.10.3.4 Rescanning và thay thế thêm

[...]

kết quả hoàn toàn vĩ mô thay thế tiền xử lý chuỗi token được không được xử lý như một chỉ thị tiền xử lý ngay cả khi nó giống như một, [...]

(Điều này "ngay cả khi nó giống như một" nhận xét là hoàn toàn thừa vì tất nhiên, không cú pháp nào được coi là ap tái xử lý chỉ thị nếu nó không giống với một! Tuy nhiên, những lời nói trong tâm trí của bạn trong nhiều năm. Tôi chỉ định vị phần của báo giá bằng cách tìm kiếm tài liệu cho chuỗi "giống như một".)

6
//#define DETECT_MLEAKS //Uncomment to detect mem-leaks 
#ifdef DETECT_MLEAKS 
#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 
#endif 

Tôi thường làm những việc như thế.

Các vấn đề liên quan