cuốn sách gpt4 ai đã làm

c++ - #warning và #error dưới dạng macro

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:34:33 27 4
mua khóa gpt4 Nike

Có cách nào để buộc macro phát ra cảnh báo và lỗi tại thời điểm biên dịch không?

Tôi hiện có một cái gì đó như thế này:

#if được xác định( __clang__ )
# định nghĩa PRAGMA( x ) _Pragma( #x )
#elif được xác định( __GNUC__ )
# định nghĩa PRAGMA( x ) _Pragma( #x )
#elif được xác định( _MSC_VER )
# định nghĩa PRAGMA( x ) __pragma( x )
#endif

#define CHUỖI(str) #str
#define STR( str ) CHUỖI( str )

#define LINE STR( __LINE__ )
#xác định TẬP TIN __FILE__
#define FILE_LINE __FILE__ "(" LINE ")"

#define THÔNG TIN(thông tin, tin nhắn) \
PRAGMA( tin nhắn( FILE_LINE ": " #info ": " msg ) )

#define TIN NHẮN( m ) THÔNG TIN( tin nhắn , m )
#define CẢNH BÁO( w ) THÔNG TIN( cảnh báo , w )
#define LỖI( e ) THÔNG TIN( lỗi , e )
#define VIỆC CẦN LÀM( t ) INFO( TODO , t )

int main()
{
TIN NHẮN("MSG")
VIỆC CẦN LÀM( "CẦN LÀM")
CẢNH BÁO("CẢNH BÁO")
LỖI("LỖI")
}

Visual Studio 2013 sẽ coi các macro này là cảnh báo/lỗi và ví dụ này sẽ không được biên dịch. Có tương đương với GCC và Clang không?


#if được xác định( _MSC_VER )
#define THÔNG TIN(thông tin, tin nhắn) \
PRAGMA( tin nhắn( FILE_LINE ": " #info ": " msg ) )
#define MESSAGE( m ) INFO( info , m )
#define CẢNH BÁO( w ) THÔNG TIN( cảnh báo , w )
#define LỖI( e ) THÔNG TIN( lỗi , e )
#define VIỆC CẦN LÀM( t ) THÔNG TIN( việc cần làm t )
#elif được xác định( __GNUC__ ) || được xác định( __clang__ )
#define THÔNG TIN(thông tin, tin nhắn) \
PRAGMA( #thông tin " : " #msg ) )
#define MESSAGE( m ) INFO( info , m )
#define CẢNH BÁO( w ) THÔNG TIN( cảnh báo GCC , w )
#define LỖI( e ) THÔNG TIN( lỗi GCC , e )
#define VIỆC CẦN LÀM( t ) INFO( , "todo" t )
#endif

câu trả lời hay nhất

Vâng, có. Trích dẫn Tài liệu tiền xử lý GCC :

#pragma cảnh báo GCC
lỗi #pragma GCC

#pragma GCC cảnh báo "tin nhắn" khiến bộ tiền xử lý đưa ra chẩn đoán cảnh báo với văn bản 'message'. Thông báo chứa trong pragma phải là một chuỗi ký tự đơn. "thông báo" lỗi #pragma GCC đưa ra một thông báo lỗi Không giống như '.#cảnh báo' Và '#lỗi' chỉ thị, những pragma này có thể được nhúng vào macro tiền xử lý bằng cách sử dụng '_Thực dụng'.

Thử nghiệm cho thấy những thứ này cũng hoạt động với tiếng kêu.

Lưu ý rằng bạn không cần phải nhúng thông tin về tệp và dòng. Lệnh này sẽ xuất ra dưới dạng chẩn đoán chung, tất cả chẩn đoán đều đã bao gồm thông tin về tệp và dòng.

Tùy thuộc vào macro cụ thể được đề cập, một tùy chọn khác có thể là buộc các lệnh gọi hàm được đánh dấu bằng cảnh báo hoặc error Các hàm thuộc tính. Không giống như pragma, nếu lệnh gọi hàm được biết là không thể truy cập được (ví dụ: vì nó xuất hiện trong nếu như block, thuộc tính không có hiệu lực nếu điều kiện luôn sai khi được phát hiện tại thời điểm biên dịch), vì vậy chúng có thể phù hợp hơn nếu bạn muốn chặn cảnh báo hoặc lỗi trong trường hợp này.

Về c++ - #warning và #error dưới dạng macro, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/24225006/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress