2013-08-02 72 views
6

Tôi có rất nhiều chức năng khác nhau, và tất cả họ đều có printf báo cáo đơn giản sử dụng __func__ tương tự như thế này:Tại sao __func__ trả về <unknown> trong một số chức năng trong C?

printf("%s - hello world!", __func__);

Bây giờ vấn đề tôi đang chạy vào đó là trong một số chức năng nó sẽ trả về <unknown> thay vì chức năng Tên.

Tại sao lại như vậy? Tôi có làm điều gì sai? AFAIK __func__ là một phần của c99 vì vậy tôi không hiểu tại sao nó không hoạt động như quảng cáo.

Tôi đang sử dụng GCC 4.7.2 trong Debian.

+1

Bạn có thể cung cấp [SSCCE] (http://www.sscce.org/) tôi tự hỏi nếu nó tương tự như http://bugs.mysql.com/bug.php?id=65294 này có thể nó là một vấn đề với một tiêu đề được bao gồm. –

+2

Bạn có thể cho chúng tôi thấy một trường hợp pertinant? – nouney

+0

Có thể nào bạn đang xây dựng các mô-đun khác nhau bằng cách sử dụng các tùy chọn gcc khác nhau cho tính tương thích của C? – alk

Trả lời

2

Nghe có vẻ như một tiêu đề bạn đang kể cả phải làm một cái gì đó tương tự như bug này và xác định __func__ như sau:

define __func__ "<unknown>" 

và do đó bạn chỉ nhìn thấy nó khi bạn bao gồm rằng tiêu đề (s). Một cách nhanh chóng để kiểm tra điều này là sử dụng __FUNCTION__ trong một phần của mã nơi __func__ không hoạt động. Sau đó, bạn cần thu hẹp nó xuống và tìm ra tiêu đề nào có logic rắc rối và sửa nó.