Hãy xem xét sau chương trình:Con trỏ trỏ tới mảng với vòng loại const trong C & C++
int main()
{
int array[9];
const int (*p2)[9] = &array;
}
Nó biên dịch tốt trong C++ (Xem demo sống here) nhưng thất bại trong việc lập trong C. Bằng GCC mặc định cho cảnh báo sau đây. (Xem bản trình diễn trực tiếp here).
prog.c: In function 'main':
prog.c:4:26: warning: initialization from incompatible pointer type [enabled by default]
const int (*p2)[9] = &array;
Nhưng Nếu tôi sử dụng -pedantic-errors
tùy chọn:
gcc -Os -s -Wall -std=c11 -pedantic-errors -o constptr constptr.c
nó mang lại cho tôi sau lỗi biên dịch
constptr.c:4:26: error: pointers to arrays with different qualifiers are incompatible in ISO C [-Wpedantic]
Tại sao nó bị lỗi trong biên soạn trong C nhưng không có trong C++? Điều gì C & C++ tiêu chuẩn nói về điều này?
Nếu tôi sử dụng const vòng loại trong tuyên bố khai báo mảng, nó cũng biên dịch tốt trong C. Vì vậy, những gì đang xảy ra ở đây trong chương trình trên?
Trong khi tôi hiểu đây là một câu hỏi hay, nhưng chỉ cần hỏi 'Tiêu chuẩn C & C++ nào nói về điều này?' Thì không tốt. Bạn đã cố gắng nhìn vào các tiêu chuẩn? Phần nào bạn không hiểu? Bạn có tìm thấy bất kỳ sự khác biệt nào không? Nỗ lực nghiên cứu của bạn ở đâu? Hy vọng tôi hiểu. :) –