Unused parameters in C are easy
Unused parameters in C are easy
Posted Feb 11, 2025 14:42 UTC (Tue) by alx.manpages (subscriber, #145117)In reply to: Catching the mismatch by farnz
Parent article: Maintainer opinions on Rust-for-Linux
In the following program, I don't use argc. Simply don't name it.
```
alx@devuan:~/tmp$ cat unused.c
#include <stdio.h>
int
main(int, char *argv[])
{
puts(argv[0]);
return 0;
}
alx@devuan:~/tmp$ gcc -Wall -Wextra unused.c
alx@devuan:~/tmp$ ./a.out
./a.out
```
Posted Feb 11, 2025 14:47 UTC (Tue)
by farnz (subscriber, #17727)
[Link] (4 responses)
Posted Feb 11, 2025 15:15 UTC (Tue)
by alx.manpages (subscriber, #145117)
[Link] (3 responses)
Then you'll need what others have mentioned.
Either a comment:
int
or a cast to void:
int
...
But Rust's _ is no documentation name either, so the C equivalent is indeed no name at all.
Posted Feb 11, 2025 15:18 UTC (Tue)
by farnz (subscriber, #17727)
[Link] (2 responses)
Posted Feb 11, 2025 15:30 UTC (Tue)
by alx.manpages (subscriber, #145117)
[Link]
Ahh, sorry, I missed that. How about this?
#define _ [[maybe_unused]]
int
The _() function already exists (for internationalization of strings), which is why I wouldn't shadow it with this macro, but if you don't use _(), when you could define the undescore to be [[maybe_unused]]. Or you could find another name that serves you.
Posted Feb 11, 2025 21:33 UTC (Tue)
by mathstuf (subscriber, #69389)
[Link]
OK, so how do I name the parameter for documentation purposes while marking it as unused?
Unused parameters in C are easy
Unused parameters in C are easy
main(int /*argc*/, char *argv[])
{...}
main(int argc, char *argv[])
{
(void) argc;
}
The cast-to-void is nice, when you want a name.
I'm sorry, you've confused me; why is Rust's use of _ignored_cpu_mask "no documentation name either"? All names starting with an underscore are flagged as explicitly unused, not just the underscore on its own. And the C things so far are all much more work than just adding an `_` to the name to indicate that it's currently deliberately unused - my contention is that if you don't make it really simple, people will prefer to turn off the entire warning rather than use the convention for unused parameters.
Unused parameters in C are worse than in Rust
Unused parameters in C are worse than in Rust
> All names starting with an underscore are flagged as explicitly unused, not just the underscore on its own.
main(_ int argc, char *argv[])
{...}
Unused parameters in C are worse than in Rust