2012-06-23 9 views
7

Tôi cần một macro giúp xuất ra tên và giá trị của tham số đã cho. Nó giống như mã sau.Cách thực hiện chức năng này trong C/C++

#define AA "Hello" 
#define BB "World" 
#define PRINT(input_param) printf("input_param: %s\n", (input_param)) 
void main() 
{ 
    PRINT(AA); 
    PRINT(BB); 
} 

Tôi đang chờ đợi kết quả: AA: Hello\n BB: World\n

Nhưng rõ ràng nó không phải. Ai cũng có thể sửa tôi? Cảm ơn.

+1

Tại sao "nhưng rõ ràng nó không phải là" .. những gì sẽ xảy ra khi bạn chạy này? – Levon

+0

@Levon "input_param: Xin chào \ ninput_param: Thế giới \ n" –

+0

@ R.MartinhoFernandes Cảm ơn bạn đã thông tin. – Levon

Trả lời

12

Bạn cần phải xâu chuỗi tên macro bằng #. Đây là cách assert() làm việc cũng như:

#define AA "Hello" 
#define BB "World" 
#define PRINT(input_param) printf(#input_param ": %s\n", (input_param)) 
void main() 
{ 
    PRINT(AA); 
    PRINT(BB); 
} 

Nó có thể rõ ràng hơn nếu tôi đã viết nó như thế này:

#define PRINT(input_param) printf("%s: %s\n", #input_param, (input_param)) 
+0

Tuyệt vời! Cảm ơn rất nhiều! –

+1

Điều thứ hai cũng bảo vệ chống lại các thảm họa như 'PRINT (bar% foo)'. – Dave

+0

Không phải là nó đau, nhưng bạn không cần parens xung quanh tham số macro thông qua như đối số (vì chúng không thể chứa dấu phẩy). –