tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: compilers and unused args in functions



On Fri, Jul 05, 2024 at 10:03:05AM -0400, Mouse wrote:
> In...C++, I think it is?, you can do this by declaring the unused arg
> without a name, as in
> 
> void fxn(int arg1, int)
> {
>  ...
> }
> 
> but as far as I know nobody's picked that up in C.  (It strikes me as a
> very sensible approach.)
Then you need to update your knowledge: this is now standard C23.

> (I suspect
> use of compilers that handle (void)arg or __attribute__ is commoner
> than the presence of __USE or whatever).
Your suspicion is correct here: void casts are universal,
unused-tagging will functionally work everywhere
(or, at the very least, not not work),
whereas __USE is a NetBSD macro:
  sys/sys/cdefs.h:#define __USE(a) (/*LINTED*/(void)(a))
and NetBSD uses it liberally
(I also interrogated OpenBSD (no hits)
 and FreeBSD (four hits, all below a directory that said "netbsd-...")).

If you want to ignore an argument and don't want to nominally target C23,
use (void)arg; otherwise just don't name it.

If you have a variable that's used compile-time-conditionally,
tag it __attribute__((unused)) (<C23) or [[maybe_unused]] (≥C23).

Best,

Attachment: signature.asc
Description: PGP signature



Home | Main Index | Thread Index | Old Index