In your case you do not use the entire body, so you can use a macro.
This way the code when KEYDEBUG is 0, will be like the complete function would not exist (except for the void cast, see below).
#include "assert.h"
#define KEYDEBUG 0
#ifndef KEYDEBUG
#define debugging(x) void(x);
#endif
void debugging(int var){
assert(var);
}
void setup() {
// put your setup code here, to run once:
debugging(1);
}
The information below is for not using the function parameter, but keep the function (in case you have code in your function that also does something when KEYDEBUG is 0.
Unused attribute
The cleanest way I could find is using the unused attribute:
#if KEYDEBUG
void debugging(__attribute__((unused)) int var){
//Assert
#else
void debugging(int var){
//Assert
#endif
}
or if you prefer better readability:
#if KEYDEBUG
void debugging(__attribute__((unused)) int var){
//Assert
}
#else
void debugging(int var){
//Assert
}
#endif
Cast to void
Less clean but does the job:
void debugging(int var){
#if KEYDEBUG
//Assert
#else
(void) var; // prevent unused parameter warning
#endif
}
Macros/Parameter
It's not easy to remove the variable since it's used in a function and will be called from many places probably. You could maybe you use a macro but that gets messy soon.
This solution works, and afaik the compiler will optimize the code out (if not , it will cost very less anyway).