Tôi đã sau mã ví dụ C:const cho các biểu thức kích thước mảng trên lập luận
int f(const int farg[const 5])
{
}
gì const bổ sung cho các kích thước mảng làm gì? Và sự khác biệt khi tôi bỏ qua const ở đó là gì?
Tôi đã sau mã ví dụ C:const cho các biểu thức kích thước mảng trên lập luận
int f(const int farg[const 5])
{
}
gì const bổ sung cho các kích thước mảng làm gì? Và sự khác biệt khi tôi bỏ qua const ở đó là gì?
int d(const int darg[5])
Phương tiện darg
là một con trỏ đến const
int
.
int e(int earg[const 5])
Phương tiện earg
là một con trỏ const
để int
. Đây là tính năng c99. T A[qualifier-list e]
tương đương với T * qualifier-list A
trong khai báo tham số.
Và tất nhiên (từ trên cao):
int f(const int farg[const 5])
Phương tiện farg
là một con trỏ const
-const
int
.
const bổ sung cho kích thước mảng là gì?
C11: 6.7.6.3:
Một tuyên bố của một tham số là '' mảng của loại '' sẽ được điều chỉnh để '' con trỏ đủ điều kiện để loại '', trong đó các loại vòng loại (nếu có) là các giá trị được chỉ định trong các số
[
và]
của dẫn xuất loại mảng.
Điều này có nghĩa
int f(const int farg[const 5])
sẽ được điều chỉnh để
int f(const int *const farg)
Và sự khác biệt là những gì khi tôi bỏ qua const đó?
Sau khi bỏ đi, nó tương đương với
int f(const int frag[5]) //or int f(const int frag[])
đó là cuối cùng tương đương với
int f(const int *farg)
[Có thể liên quan] (http://stackoverflow.com/q/17559631/596781) –
'const' thứ hai đã cho tôi 4 lỗi trình biên dịch – mch
@mch đảm bảo trình biên dịch của bạn hỗ trợ C99 hoặc C11. (-std = c11 chẳng hạn). clang 3.4 với -std = c11 ăn cái này mà không có vấn đề gì. – WhozCraig