Có -Wfatal-errors
làm những gì bạn muốn?
Nó dừng tất cả lỗi sau khi người đầu tiên, đó là không giống như chỉ đơn giản là đàn áp các chức năng ứng cử viên ghi chú, nhưng nó làm giảm sản lượng đáng kể:
$ cat a.cc
void f() { }
void f(int) { }
void f(char) { }
int main()
{
f((void*)0);
}
$ g++ a.cc
a.cc: In function ‘int main()’:
a.cc:7: error: call of overloaded ‘f(void*)’ is ambiguous
a.cc:2: note: candidates are: void f(int) <near match>
a.cc:3: note: void f(char) <near match>
$ g++ a.cc -Wfatal-errors
a.cc: In function ‘int main()’:
a.cc:7: error: call of overloaded ‘f(void*)’ is ambiguous
compilation terminated due to -Wfatal-errors.
Hoặc, nếu bạn muốn vá GCC , công cụ này thêm công tắc -fno-candidate-functions
:
--- gcc/c-family/c.opt.orig 2012-07-11 16:37:29.373417154 +0000
+++ gcc/c-family/c.opt 2012-07-11 17:09:47.340418384 +0000
@@ -752,6 +752,10 @@
fbuiltin-
C ObjC C++ ObjC++ Joined
+fcandidate-functions
+C++ ObjC++ Var(flag_candidates) Init(1)
+-fno-candidate-functions Do not print candidate functions when overload resolution fails
+
fcheck-new
C++ ObjC++ Var(flag_check_new)
Check the return value of new
--- gcc/cp/call.c.orig 2012-07-11 17:08:34.186424089 +0000
+++ gcc/cp/call.c 2012-07-11 17:09:51.843444951 +0000
@@ -3317,6 +3317,9 @@
for (n_candidates = 0, cand1 = candidates; cand1; cand1 = cand1->next)
n_candidates++;
+ if (!flag_candidates)
+ return;
+
inform_n (loc, n_candidates, "candidate is:", "candidates are:");
for (; candidates; candidates = candidates->next)
print_z_candidate (loc, NULL, candidates);
--- gcc/cp/pt.c.orig 2012-07-11 16:37:35.658636650 +0000
+++ gcc/cp/pt.c 2012-07-11 17:10:20.910435942 +0000
@@ -1751,9 +1751,12 @@
void
print_candidates (tree fns)
{
- const char *str = NULL;
- print_candidates_1 (fns, false, &str);
- gcc_assert (str == NULL);
+ if (flag_candidates)
+ {
+ const char *str = NULL;
+ print_candidates_1 (fns, false, &str);
+ gcc_assert (str == NULL);
+ }
}
/* Returns the template (one of the functions given by TEMPLATE_ID)
Nguồn
2012-07-11 16:27:08
Chờ, bạn muốn thông báo lỗi có * thông tin * ít hơn? –
Các định nghĩa chức năng mà nó gợi ý được ẩn đằng sau 10 lớp templating (đặc biệt là với boost) và làm cho nó khó khăn hơn nhiều để tìm nơi trình biên dịch thực sự xác định dòng với lỗi. Tôi muốn nó cho tôi biết lỗi ở đâu và có gì sai, nhưng tôi không thực sự cần nó để đề nghị cách sửa nó. – sshannin
đường ống qua grep, chỉ khớp với các dòng có 'lỗi:' trong đó? FWIW môi trường phát triển của tôi đã 'nhảy vào dòng với lỗi' như một tính năng, mà như là một tiền thưởng thêm lá trên cùng của danh sách các ứng cử viên hiển thị trên màn hình. – Flexo