Câu hỏi này nảy sinh trong bối cảnh của câu hỏi này: Find unexecuted lines of c++ codeMục loại xung đột cho các biến hệt định nghĩa
Khi tìm kiếm cho vấn đề này hầu hết mọi người đã cố gắng để thêm mã và các biến thành phần tương tự - nhưng điều này chắc chắn không phải là vấn đề đây. Dưới đây là một ví dụ làm việc tối thiểu:
unsigned cover() { return 0; }
#define COV() do { static unsigned cov[2] __attribute__((section("cov"))) = { __LINE__, cover() }; } while(0)
inline void foo() {
COV();
}
int main(int argc, char* argv[])
{
COV();
if (argc > 1)
COV();
if (argc > 2)
foo();
return 0;
}
mà kết quả với g++ -std=c++11 test.cpp
(g ++ (GCC) 4.9.2 20.150.212 (Red Hat 4.9.2-6)) trong các lỗi sau:
test.cpp:6:23: error: cov causes a section type conflict with cov
COV();
^
test.cpp:11:30: note: ‘cov’ was declared here
COV();
^
Các lỗi không phải là rất hữu ích mặc dù, vì nó không nêu lý do tại sao điều này được coi là một cuộc xung đột. Cả tệp .ii và .s tạm thời không đưa ra gợi ý nào về vấn đề có thể xảy ra. Trên thực tế, chỉ có một định nghĩa phần trong tệp .s
.section cov,"aw",@progbits
và tôi không hiểu tại sao định nghĩa tiếp theo nên xung đột với điều này ("aw", @ progbits là chính xác ...).
Is there any way to get more information on this? See what the precise conflict is? Or is this just a bug...?
Cũng thấy [Lỗi biên dịch "X gây xung đột loại phần với Y" nên cung cấp thêm thông tin] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82209) trong Bộ theo dõi sự cố GCC. – jww
Câu hỏi này là bản sao chính xác của [Dữ liệu tĩnh nội tuyến gây ra xung đột loại phần] (https: // stackoverflow.com/q/35091862/1362568), trong đó tôi đã viết câu trả lời được chấp nhận với giải thích chi tiết và [giải pháp sau đó của OP] (https://stackoverflow.com/a/36361512/1362568) là đẹp hơn. Việc sử dụng '__attribute__' như trong vấn đề không được GCC hỗ trợ. –
@MikeKinghan gợi ý: 1/tạo bản tóm tắt câu trả lời xuất sắc của bạn từ bản sao. 2/kiếm tiền thưởng. 3/đóng câu hỏi là trùng lặp. – YSC