2012-07-30 28 views
5

xem xét mã này:Làm cách nào để làm cho gcc cảnh báo về các chức năng không xác định?

đoạn
int function() 
{ 
    int a = 1 ; 
    int b = helper(&a); 
    return b ; 
} 

int main() 
{ 
    function(); 
    return 0 ; 
} 

Mã này biên dịch phản đối mã mà không vấn đề sử dụng gcc, mặc dù thực tế rằng chức năng gọi là 'helper' vẫn chưa được công bố. Tôi biết rằng các mối liên kết nên bắt này nhưng tôi đã nhìn thấy tối nghĩa bugs mà giải quyết một khi các tiêu đề chính xác (có chứa các khai báo chức năng) đã được bao gồm, mặc dù mối liên kết và trình biên dịch không tạo ra bất kỳ lỗi nào.

Có một số cảnh báo gcc có vẻ liên quan nhưng không thực sự đạt được những gì tôi muốn: -Wmissing-prototype, -Wmissing-declarationations và -Wstrict-prototype. Rất tiếc, các cảnh báo này bị giới hạn đối với các mẫu nguyên mẫu bị thiếu khi các chức năng toàn cục là được xác định, tôi quan tâm đến các cảnh báo về các nguyên mẫu bị thiếu khi chức năng toàn cầu được tham chiếu.

Có ai có thể đề xuất giải pháp thay thế không ?, cảm ơn.

Trả lời

11

Bạn muốn cảnh báo -Wimplicit-function-declaration.

Cá nhân, tôi thích biên dịch mã của tôi với -Wall -Wextra.

+0

Có !, đó là cái tôi muốn :) –

+1

Điều này được kích hoạt bởi -Wall (bạn nên luôn sử dụng) và khi sử dụng -std = c99. – ext

+0

@ext yep, đây là những gì 'người đàn ông gcc' nói. –

4

Sử dụng -Wl,--no-undefined để đảm bảo lỗi bắt buộc undefined function.

+0

Tùy chọn trình liên kết này? –

+0

@GearoidMurphy: Có. – Jack

Các vấn đề liên quan