2014-06-17 19 views
5

Tôi đang thực hiện các thay đổi nhỏ đối với dự án C++ đa nền tảng với một tệp makefile Linux 400 dòng mà người khác đã tạo năm trước."-dndebug" (chữ thường) có làm gì trong g ++ không?

Hai dòng trong makefile sử dụng -dndebug (chữ thường) làm đối số dòng lệnh cho g ++.
Tôi nghĩ rằng ý định là để xác định biểu tượng ndebug, nhưng lập luận thậm chí còn làm bất cứ điều gì khi nó thấp hơn?

Tôi có kiến ​​thức tối thiểu về g ++ và thực hiện nhưng, đi theo trang được liên kết bên dưới, tôi nghĩ đối số cần phải ở trên trường hợp để hoạt động.
http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

+1

gcc thực sự có tùy chọn '-d', nhưng đó là để trình biên dịch gỡ lỗi tự chuyển. Bạn không cần nó. Và ngay cả khi nó được dự định, '-dndebug' không hợp lệ (nhưng ví dụ:' -da' là). Vì vậy, tôi cho rằng nó nên là '-DNDEBUG', nhưng ai đó đã làm hỏng nó. – keltar

+1

Đối với bất kỳ ai chỉnh sửa câu hỏi này: Tôi nghĩ rằng bản chỉnh sửa đã thay đổi "dndebug" thành "DNDEBUG" trong tiêu đề không phù hợp, vì toàn bộ vấn đề đặt ra là hỏi liệu nó có làm bất kỳ điều gì trong trường hợp thấp hơn hay không. –

Trả lời

6

Đó là khá dễ dàng để kiểm tra:

$ cat test.cpp 
#include <iostream> 

int main() 
{ 
#ifdef TEST_DEFINE 
    std::cout << "defined" << std::endl; 
#endif 
    return 0; 
} 

$ g++ -o 1 -DTEST_DEFINE test.cpp 
$ ./1 
defined 
$ g++ -o 2 -dTEST_DEFINE test.cpp 
cc1plus: warning: unrecognized gcc debugging option: T [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: S [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: T [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: _ [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: F [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default] 
$ ./2 
$ 

Như bạn có thể thấy tùy chọn -d thực sự gây ra cảnh báo trình biên dịch như vậy có vẻ như -D là những gì được dự định.

+0

Ah, điều đó giải thích bốn cảnh báo tôi thấy gần cuối quá trình thực hiện. Tôi đã không liên kết những lời cảnh báo với lập luận đó, mặc dù tôi ngạc nhiên rằng "e" và "u" là những nhân vật duy nhất xuất hiện như không được công nhận. Cảm ơn. –

13

Có, nó phải là chữ hoa trên như thế này -DNDEBUG.

-D là tùy chọn GCC để xác định macro. NDEBUG là macro được xác định để tắt các xác nhận theo yêu cầu của tiêu chuẩn C.

Tôi có kiến ​​thức tối thiểu về g ++ và thực hiện nhưng, theo trang được liên kết bên dưới, tôi cho rằng đối số cần phải ở trên để hoạt động.

Đối với -dndebug, vì macro là trường hợp nhạy cảm, tôi nghĩ rằng nó sẽ không có bất kỳ tác dụng tức là nó nên được bỏ qua, trừ khi có một số mã bạn đã có tài liệu tham khảo nó.

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