2012-03-01 35 views
5

Tôi đang làm việc trên chương trình gỡ lỗi/ghi nhật ký và tự hỏi liệu có thể tạo macro mà tôi có thể dán bên trong mỗi chức năng hay không và nó sẽ in tên hàm và giá trị tham số mỗi khi hàm được gọi. Tên chức năng có thể được resovled tại thời gian biên dịch, vấn đề là tìm ra cách để in các giá trị tham số?Macro để nhận tên hàm và giá trị tham số từ bên trong hàm

CẬP NHẬT: Tôi nhớ đọc một bài viết để lấy các tham số nhưng mã trình cắm được kích hoạt và thao tác các con trỏ ngăn xếp, không tương thích với nền tảng - thứ mà tôi cần.

+2

C hoặc C++? Ngôn ngữ khác nhau. – Puppy

+0

nhưng macro phải giống nhau cho cả hai, tôi đã chọn cả hai để mở rộng đối tượng – tunafish24

Trả lời

2

Bạn có thể sử dụng macro __FUNCTION__ hoặc __func__ cho tên hàm. Đối với các tham số, tôi không nghĩ rằng có một built-in macro để đạt được điều này.

Các macro hữu ích khác là __LINE____FILE__.

EDIT:

__FUNCTION____func__ không nằm trong tiêu chuẩn, nhưng họ được hỗ trợ rộng rãi.

16,8 giao dịch với các macro được xác định trước:

__cplusplus 
__DATE__ 
__FILE__ 
__LINE__ 
__STDC_HOSTED__ 
__TIME__ 

và macro được xác định bởi việc thực hiện:

__STDC__ 
__STDC_VERSION__ 
__STDC_ISO_10646__ 
+3

'__func__' * là * một phần của tiêu chuẩn, nhưng nó không phải là macro. Có lẽ đó là lý do tại sao bạn không tìm thấy nó ở nơi đó. –

+0

@ JensGustedt chúng ta đang nói về tiêu chuẩn C++? –

+0

không có tôi đã nói về C. Trong C11 nó là 6.4.2.2, một định danh được xác định trước, không phải là một vĩ mô. AFAIR đã có trong C99, vì vậy nó cũng phải có trong C++. –

1

Đối với tên hàm, bạn có thể sử dụng các tiêu chuẩn (từ C99) nhận dạng __func__.

Trong C++, mã định danh mở rộng GNU __PRETTY_FUNCTION__ cũng sẽ in các loại tham số.

+0

Người hỏi nói rằng anh biết cách lấy tên hàm từ macro - mối quan tâm của anh ta là in các tham số chức năng. – Perry

0

Không có cách di động để có được tất cả các giá trị tham số và in chúng - bạn chắc chắn không thể làm điều đó từ macro. Bạn có thể phải sử dụng một phương pháp khác để đạt được những gì bạn muốn.

+0

phương pháp khác là gì? Tôi chắc chắn có thể sử dụng một macro để thay thế mã C. – tunafish24

+0

Bạn có thể làm điều gì đó xấu xí trong đó bạn đã thực hiện tất cả các khai báo hàm bằng cách sử dụng macro đã mã hóa mã cho khai báo hàm và sau đó in ra các giá trị của chúng ở phần đầu của hàm. Đây không phải là đẹp - Tôi sẽ không đi xuống con đường đó. Bằng cách đó nằm điên rồ. Trong thế giới thực, chỉ cần sử dụng gdb, hoặc in những gì bạn cần khi bạn cần nó. – Perry

+0

@Perry bạn sẽ làm thế nào? 1 từ tôi nếu bạn có thể cung cấp một ví dụ làm việc. –

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