- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
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/
warnings.warn() 和有什么区别?和 logging.warn()就它们的作用和应该如何使用而言? 最佳答案 我同意另一个答案——logging 用于记录,warning 用于警告——但我
这是我写的代码: #usr/bin/python3 import warnings def tt(): warnings.warn("123") return 10 x = tt()
我正在尝试使用基于文档中显示的示例的代码片段来提出DeprecationWarning。 http://docs.python.org/2/library/warnings.html#warnings
我正在尝试提出一个 DeprecationWarning,其中包含基于文档中显示的示例的代码片段。 http://docs.python.org/2/library/warnings.html#war
我有兴趣尝试在调用时操纵警告,而无需围绕方法创建支持基础设施。也就是说,我需要能够捕获警告,而无需使用以下代码包装代码: tryCatch(..., warning = function() { ac
我是 js 我正在尝试使用 this.setState({但我收到警告。 你们能告诉我为什么我收到以下警告吗 warning.js:45 警告:setState(...):只能更新已安装或正在安装的组
我的最小例子是 #!/usr/bin/python3 import warnings warnings.warn('Run Forest run!', stacklevel=2) warnings.w
本文整理了Java中com.ibm.wala.util.warnings.Warnings.asString()方法的一些代码示例,展示了Warnings.asString()的具体用法。这些代码示例
本文整理了Java中com.ibm.wala.util.warnings.Warnings.clear()方法的一些代码示例,展示了Warnings.clear()的具体用法。这些代码示例主要来源于G
本文整理了Java中com.ibm.wala.util.warnings.Warnings.add()方法的一些代码示例,展示了Warnings.add()的具体用法。这些代码示例主要来源于Githu
我一定是错误地理解了警告文档。我读它的方式,这段代码: use warnings; use warnings FATAL => 'all'; warnings::warn('numeric', 'bl
我在 Linux 上使用 OpenMP 指令编译 C 代码时收到此警告: warning: ignoring #pragma omp parallel Gcc 版本是 4.4。 这只是一个我不应该关心
我有一个奇怪的 g++ 行为,当显示任何其他警告时,它会显示有关无法识别的命令行选项的警告。 例子: struct Foo{virtual int bar() = 0;}; struct Bar:pu
在 Visual Studio 2010 中使用 C++ native 解决方案。 #pragma warning (push) 用于 cpp 文件的开头,在所有包含之后。之后,#pragma war
我习惯于开始我的每一个脚本 use strict; use warnings; 但是这里的一些知名人士推荐 use warnings 'all'; 如果我理解正确,后者甚至比第一个更好。所以我通读了d
我正在编码C#。我使用NCrunch在后台运行单元测试。我已经在CSPROJ文件中设置了(新的CSPROJ格式)。 我想将FxCop分析仪用作NuGet软件包:https://docs.microso
谁能帮我解决这个问题,我收到此警告消息 log4j:WARN No appenders could be found for logger (com.akak.book.shop.listener.L
我正在尝试了解更多关于 linux 内核中的 kobject 的信息,并且在尝试编写一个使用此类工具的模块时,我收到了错误和警告消息,因此我将相关数据的精简版本放在这里结构和相应的gcc的错误和警告信
http://docs.python.org/2/howto/logging.html 上的样本同时使用 warn 和 warning。 最佳答案 logging.warn 自 Python 3.3
警告[nuxt]两个解析为相同名称ProseCode的组件文件:。警告[nuxt]两个解析为相同名称ProsePre的组件文件:。更新nuxt 3后的警告->3.7&nuxt/内容2.4->2.8。如
Tôi là một lập trình viên xuất sắc, rất giỏi!