2010-03-25 32 views
5

Tôi đang cố gắng biên dịch dự án của mình theo GCC (Visual Studio biên dịch hoàn hảo).GCC, Unicode và __FUNCTION__

Tôi có chức năng xác nhận tùy chỉnh để gửi thông báo chuỗi. Một phần của nó là _ _FUNCTION__ vĩ mô, mà tôi "unicodize" sử dụng mở rộng vĩ mô từ MSDN

#define WIDEN2(x) L ## x 
#define WIDEN(x) WIDEN2(x) 

Nó biên dịch ổn trong MSVC, nhưng nó in này trong GCC:

error: ‘L__FUNCTION__’ was not declared in this scope 

duy nhất giải pháp tôi có thể đi kèm là chuyển đổi nội dung của __FUNCTION __ thành chuỗi thời gian chạy bằng mbstowcs, nhưng tôi muốn tìm một cách biên dịch để thực hiện nó.

Cảm ơn bạn đã trợ giúp.

+0

Bạn nên đăng macro '__FUNCTION__' của mình. – Gabe

+1

Tôi nghĩ rằng nó được tự động cung cấp bởi các biên dịch, ít nhất MSVS tự động hiển thị nó. Nó thậm chí sẽ không cho phép tôi đi đến định nghĩa, vì vậy tôi không biết nó được định nghĩa như thế nào. –

Trả lời

5

Trong GCC __FUNCTION__ là tiện ích mở rộng không chuẩn. Trích dẫn: GCC Online Docs

Trong GCC 3.3 trở về trước, trong C chỉ, __FUNCTION____PRETTY_FUNCTION__ được coi là xâu; họ có thể được sử dụng để khởi tạo char mảng và chúng có thể được ghép nối với các chuỗi ký tự khác. GCC 3.4 và sau đó coi chúng là biến, như __func__. Trong C++, __FUNCTION____PRETTY_FUNCTION__ luôn có là các biến.

Vì vậy, việc thêm L ở mặt trước __FUNCTION__ chỉ cần biến nó thành L__FUNCTION__ có thể không được xác định.

+1

Vì vậy, tôi cho rằng chuyển đổi thời gian chạy là cách duy nhất? –

+0

Vì vậy, tôi đã làm nó theo cách thời gian chạy. Cảm ơn về câu trả lời. –

+0

Tại sao họ lại thay đổi? Dường như đối với tôi, luôn coi họ là những chuỗi chữ sẽ hữu ích hơn rất nhiều. – antred