On Sunday, 25 June 2017 at 15:58:48 UTC, Johan Engelen wrote:
[...]
If version(X) is not defined, there should be no call and no extra code at -O0.
[...]

In C, you could do something like:
```
#if X
  void foo() {......}
#else
  #define foo()
#endif
```

How would you do this in D?

By requiring the compiler to inline the empty foo:

```
version (Foo)
{
    void foo()
    {
        import std.stdio;
        writeln("foo");
    }
} else {
    pragma(inline, true)
    void foo() {}
}

void main(string[] args)
{
    foo();
}
```

See [1] for full assembly, shortened output as follows:

```
void example.foo():
        ret

_Dmain:
        xor     eax, eax
        mov     qword ptr [rsp - 16], rdi
        mov     qword ptr [rsp - 8], rsi
        ret
```

As you can see, while the code for the function itself will still be emitted, since it's empty the inlining will result in no instructions as the result.

[1] https://godbolt.org/g/RLt6vN

Reply via email to