Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
January 31, 2016 C Macro deeper meaning? | ||||
---|---|---|---|---|
| ||||
If I understand correctly, this piece of code: enum NOTUSED(v) do { (void)(1 ? (void)0 : ( (void)(v) ) ); } while(0) can be converted to the following in D: void notUsed(T)(T v) { return cast(void)0; }; since it always returns cast(void)0 regardless of the input. But it cannot be that simple, so what am I missing? Thanks, Andrew Edwards |
January 31, 2016 Re: C Macro deeper meaning? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrew Edwards | On Sunday, 31 January 2016 at 02:58:28 UTC, Andrew Edwards wrote:
> But it cannot be that simple, so what am I missing?
I'm guessing the macro was there in C to silence compiler warnings about not using a return value. So I think your translation is ok:
NOTUSED(somefunction(....));
still calls the function, so the behavior is the same. If I'm right, the macro was just about discarding the return value in such a way as to tell the compiler warning / lint program that you intentionally wanted to ignore it.
|
January 31, 2016 Re: C Macro deeper meaning? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Sunday, 31 January 2016 at 03:13:46 UTC, Adam D. Ruppe wrote:
> On Sunday, 31 January 2016 at 02:58:28 UTC, Andrew Edwards wrote:
>> But it cannot be that simple, so what am I missing?
>
> I'm guessing the macro was there in C to silence compiler warnings about not using a return value. So I think your translation is ok:
>
> NOTUSED(somefunction(....));
>
> still calls the function, so the behavior is the same. If I'm right, the macro was just about discarding the return value in such a way as to tell the compiler warning / lint program that you intentionally wanted to ignore it.
Okay, got it. Much appreciated.
|
January 31, 2016 Re: C Macro deeper meaning? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrew Edwards | On Sunday, 31 January 2016 at 02:58:28 UTC, Andrew Edwards wrote:
> If I understand correctly, this piece of code:
> enum NOTUSED(v) do { (void)(1 ? (void)0 : ( (void)(v) ) ); } while(0)
>
> can be converted to the following in D:
>
> void notUsed(T)(T v) { return cast(void)0; };
>
> since it always returns cast(void)0 regardless of the input.
>
> But it cannot be that simple, so what am I missing?
>
> Thanks,
> Andrew Edwards
Might want to change the function argument to `ref T v`, as struct postblits might run otherwise. Probably no reason to `return` either.
|
February 01, 2016 Re: C Macro deeper meaning? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrew Edwards | On Sunday, 31 January 2016 at 02:58:28 UTC, Andrew Edwards wrote:
> void notUsed(T)(T v) { return cast(void)0; };
>
> since it always returns cast(void)0 regardless of the input.
>
> But it cannot be that simple, so what am I missing?
Now notUsed has an unused parameter v.
|
Copyright © 1999-2021 by the D Language Foundation