คุณสามารถใช้แอตทริบิวต์ที่ไม่ได้ใช้ของ gcc / clang ได้ แต่ฉันใช้แมโครเหล่านี้ในส่วนหัวเพื่อหลีกเลี่ยงการมีแอตทริบิวต์เฉพาะ gcc ทั่วทุกแหล่งที่มาการมี__attribute__
อยู่ทุกที่นั้นค่อนข้าง verbose / น่าเกลียด
#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
จากนั้นคุณสามารถทำ ...
void foo(int UNUSED(bar)) { ... }
ฉันชอบสิ่งนี้เพราะคุณได้รับข้อผิดพลาดหากคุณลองใช้bar
ในรหัสใดก็ได้เพื่อให้คุณไม่สามารถทิ้งคุณลักษณะไว้โดยไม่ได้ตั้งใจ
และสำหรับฟังก์ชั่น ...
static void UNUSED_FUNCTION(foo)(int bar) { ... }
หมายเหตุ 1):
เท่าที่ผมรู้ว่า MSVC __attribute__((__unused__))
ไม่ได้เทียบเท่ากับ
หมายเหตุ 2):แมโครจะไม่ทำงานสำหรับข้อโต้แย้งที่มีวงเล็บดังนั้นหากคุณมีข้อโต้แย้งเช่น คุณไม่สามารถทำหรือนี่เป็นเพียงข้อเสียกับฉันแมโครพบเพื่อให้ห่างไกลในกรณีเหล่านี้ผมถอยกลับ ถึง
UNUSED
float (*coords)[3]
float UNUSED((*coords)[3])
float (*UNUSED(coords))[3]
UNUSED
(void)coords;