Tôi sử dụng g ++ 4.4.3 và có bí danh sau vì vậy mà tôi không bao giờ quên bật những lời cảnh báo:
$ alias g++
alias g++='g++ -ansi -pedantic -Wall -W -Wconversion -Wshadow -Wcast-qual -Wwrite-strings'
Nếu biên soạn với ở trên, sẽ có một số cảnh báo. Các bước sau đây cho thấy các tùy chọn khác nhau hiển thị các cảnh báo khác nhau như thế nào.
Compilation không có tùy chọn cảnh báo không hiển thị bất kỳ cảnh báo
$ \g++ sizeofarray.cpp
Bật -Wall
$ \g++ -Wall sizeofarray.cpp
sizeofarray.cpp: In function ‘int main()’:
sizeofarray.cpp:12: warning: unused variable ‘q’
Bật -Wextra
$ \g++ -Wall -Wextra sizeofarray.cpp
sizeofarray.cpp: In function ‘int main()’:
sizeofarray.cpp:12: warning: unused variable ‘q’
sizeofarray.cpp: At global scope:
sizeofarray.cpp: In instantiation of ‘int size(T (&)[N]) [with T = char, int N = 27]’:
sizeofarray.cpp:12: instantiated from here
sizeofarray.cpp:4: warning: unused parameter ‘Array’
Cuối cùng bật -pedantic
để bắt vấn đề thực sự
$ \g++ -Wall -Wextra -pedantic sizeofarray.cpp
sizeofarray.cpp: In function ‘int main()’:
sizeofarray.cpp:12: warning: ISO C++ forbids variable length array ‘q’
sizeofarray.cpp:12: warning: unused variable ‘q’
sizeofarray.cpp: At global scope:
sizeofarray.cpp: In instantiation of ‘int size(T (&)[N]) [with T = char, int N = 27]’:
sizeofarray.cpp:12: instantiated from here
sizeofarray.cpp:4: warning: unused parameter ‘Array’
'q [sizeof (p)]' là tốt, có thể bạn có nghĩa là 'q [size (p)]'. Lưu ý rằng sau này sẽ trở thành hợp lệ trong C++ 0x (nếu bạn khai báo 'size' là' constexpr'). – avakar
Vấn đề là với 'kích thước' thay vì sizeof. Xem bài đăng của tôi. – Chubsdad
Hãy thử các tùy chọn trình biên dịch -pedantic hoặc -std = C++ 98 ;-) – sellibitze