2012-02-25 37 views
6

Possible Duplicate:
Programmatic way to get variable name in C?Làm thế nào để in tên của biến trong C++?

Tôi đã kiểm tra một số blog trước khi đăng bài đăng tại đây. Tôi đã thử đoạn mã sau ...

int a=21; 

int main() 
{ 
    cout<<#a<<a<<endl; 
    return 0; 
} 

Tôi đang sử dụng trình biên dịch g ++ trên ubuntu 10.04. Và tôi nhận được lỗi sau:

sample.cpp:17: error: stray ‘#’ in program. 

Vui lòng đề nghị tôi làm cách nào để in tên biến.

+1

Tại sao bạn gắn thẻ C nếu bạn đang sử dụng 'g ++' và' cout'? – cnicutar

+5

'cout << "a" << endl; ' – ouah

+0

Xem http://stackoverflow.com/questions/1623111/programmatic-way-to-get-variable-name-in-c –

Trả lời

14

Các # stringifying điều vĩ mô chỉ hoạt động macro bên trong.

Bạn có thể làm một cái gì đó như thế này:

#include <iostream> 

#define VNAME(x) #x 
#define VDUMP(x) std::cout << #x << " " << x << std::endl 

int main() 
{ 
    int i = 0; 
    std::cout << VNAME(i) << " " << i << std::endl; 

    VDUMP(i); 

    return 0; 
} 
+1

@JamesMcLaughlin - Nhưng bạn có thể làm macro phức tạp hơn. –

+3

@JamesMcLaughlin không hoàn toàn giống nhau: nếu bạn đổi tên biến thành 'j' và quên cập nhật chuỗi' "i" ', sẽ không có lỗi biên dịch; sử dụng macro 'VNAME' trên biến * * đảm bảo rằng giá trị được in vẫn" đồng bộ "với tên biên dịch của biến. – dasblinkenlight

+1

@dasblinkenlight Điều gì xảy ra nếu bạn đổi tên biến thành 'j' và có một biến khác gọi là' i'? Sẽ không có lỗi thời gian biên dịch, và nó sẽ hiển thị tên sai. Macro 'VDUMP' vừa được thêm vào là tốt hơn nhiều. –

0

Các # là vì nếu bạn đang viết một macro.

Nếu dòng cout của bạn là một vĩ mô, nó sẽ làm việc theo cách bạn mong đợi.

Nếu bạn đang không ở trong một macro, bạn chỉ cần gõ "a".

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