On Sunday, 17 October 2021 at 02:45:03 UTC, data pulverizer wrote:
While we're on this subject, I've been having similar issues now tried compiling @rempas's example file with:

```
gcc test_og.c -c -o test_og.o
dmd test.d test_og.o
```

and get the response:

```
test_og.c(1): Error: identifier or `(` expected
test_og.c(6): Error: identifier or `(` expected
```

You're not doing this with the files in the thread, or you'd get

```
test.d(1): Error: module `test_c` is in file 'test_c.d' which cannot be read
```

as test.d is still importing test_c.c, a different file from test_og.o

I get your error if the original test_og.c is used but test.d is modified to import test_og.c:

```d
import test_og;

void main() {
      hello_world();
}
```

In this case, your compilation to test_og.o doesn't matter; D is still trying to import test_og.c, and since that file has CPP `#include` directives which importC doesn't support, it's erroring out on those.

To link in a C object rather than use importC, you'd need this test.d:

```d
extern (C) void hello_world();

void main() {
      hello_world();
}
```

With which:

```
$ gcc test_og.c -c -o test_og.o
$ dmd test.d test_og.o
$ ./test
Hello world!!!
```

Reply via email to