On Friday, 15 October 2021 at 21:47:21 UTC, Paul Backus wrote:
On Friday, 15 October 2021 at 20:33:33 UTC, JN wrote:
Is there some nice way of achieving something like this C99 code in D?

```c
#include <stdio.h>

typedef struct {
    int x, y;
} inputs_t;

void foo(inputs_t* optional_inputs)
{
    if (!optional_inputs) {
        printf("0 0\n");
    } else {
printf("%d %d \n", optional_inputs->x, optional_inputs->y);
    }
}

int main(void) {
    foo(NULL); // prints 0 0
    foo(&(inputs_t){.x = 5, .y = 6}); // prints 5 6
}
```

```d
static global(alias value) = value;

struct Inputs { int x, y; }

void foo(Inputs* inputs)
{
    import std.stdio;
    if (inputs is null)
        writeln("0 0");
    else
        writeln(inputs.x, " ", inputs.y);
}

void main()
{
    foo(null);
    foo(&global!(Inputs(5, 6)));
}
```


Nice trick, so far Paul's answer is the cleanest, 0 imports, doesn't change the signature of the method, and he doesn't create overloading

I remember i was once trying to achieve the same as OP, i ended up just using a local variable

Reply via email to