Bạn có thể sử dụng thuộc tính không sử dụng của gcc / clang, tuy nhiên tôi sử dụng các macro này trong một tiêu đề để tránh có các thuộc tính cụ thể của gcc trên toàn bộ nguồn, cũng có __attribute__
ở mọi nơi là hơi dài dòng / xấu xí.
#ifdef __GNUC__
# define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
# define UNUSED(x) UNUSED_ ## x
#endif
#ifdef __GNUC__
# define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
# define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif
Sau đó, bạn có thể làm ...
void foo(int UNUSED(bar)) { ... }
Tôi thích điều này bởi vì bạn gặp lỗi nếu bạn thử sử dụng bar
mã ở bất cứ đâu để bạn không thể bỏ qua thuộc tính.
và cho các chức năng ...
static void UNUSED_FUNCTION(foo)(int bar) { ... }
Lưu ý 1):
Theo như tôi biết, MSVC không có tương đương __attribute__((__unused__))
.
Lưu ý 2):
Các UNUSED
macro sẽ không làm việc cho các đối số có chứa dấu ngoặc đơn,
vì vậy nếu bạn có một cuộc tranh cãi như float (*coords)[3]
bạn không thể làm,
float UNUSED((*coords)[3])
hoặc float (*UNUSED(coords))[3]
, Đây là Nhược điểm duy nhất để UNUSED
tôi tìm thấy vĩ mô cho đến nay, trong những trường hợp này tôi rơi trở lại đến(void)coords;