Đưa vào tập macro đa biến trong g ++ 4.4 có ngữ nghĩa khó hiểu và xoắn. Bạn có thể có được một ý tưởng tốt hơn về những gì không xảy ra bằng cách sử dụng g++ -E broken_code.cpp
và xem những gì bộ xử lý trước được đưa vào. Có một vài chục chỉ thị tiền xử lý GNU C có thể ngăn chặn khai báo ::va_list
từ biên dịch là __gnuc_va_list
. gõ __builtin_va_list
mã rác:
$cat junk.cpp
#include <cstdarg>
void foo(char *f, ...) { va_list va; va_start(va, va); }
int main(void) { foo("", "", ""); return 0; }
$ g++ junk.cpp
$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
biên dịch và liên kết (với cảnh báo) với sản lượng có liên quan của g++ -E junk.cpp
phúc:
# 40 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 102 "/usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 45 "/usr/include/c++/4.4/cstdarg" 2 3
# 54 "/usr/include/c++/4.4/cstdarg" 3
namespace std __attribute__ ((__visibility__ ("default"))) {
using ::va_list;
}
Chúng tôi có một 'tag Telepath-needed'? – Maulrus
@Maulrus: Không còn gì nữa. (Nó sẽ được ngầm định trong hầu hết mọi câu hỏi có điểm thấp được hỏi nếu chúng tôi có nó ...) –
Hi David Tôi đã gặp vấn đề tương tự trên Ubuntu 9.10. Sử dụng GCC 4.4.1 Bạn đã giải quyết vấn đề này chưa? Nếu có, hãy giúp tôi. Cảm ơn Vinit –