C++ and D bool compatibility

Jeremy DeHaan dehaan.jeremiah at gmail.com
Thu May 2 13:59:08 PDT 2013


On Saturday, 27 April 2013 at 23:38:17 UTC, bearophile wrote:
> Jeremy DeHaan:
>
>> I was reading this:
>> http://dlang.org/cpp_interface.html
>>
>> And it mentions the various types and their compatibility with 
>> one another, but it leaves out bools. It would be very useful 
>> for me if it works out like this, but does anyone know off the 
>> top of their heads/tried it before?
>
> If it misses bool, then maybe that page needs a documentation 
> patch.
>
> bools in D are represented with 1 byte, 0 or 1.
>
> In C++ their size is not fixed: "for Visual C++ 4.2, a call of 
> sizeof(bool) yields 4, while in Visual C++ 5.0 and later, the 
> same call yields 1."
>
> Bye,
> bearophile


Well I realized that I was being dumb in the sense that I am 
mainly using a C interface and not really a C++ interface. That 
said, after playing with some ideas, I have something that works, 
though I am not entirely sure how safe it is.

Consider the following,

In C/C++....

DBoolTest.h:

typedef char DBool;
#define DTrue 1;
#define DFalse 0;

SOME_EXPORT_MACRO DBool isAGreaterThanB(int a, int b);//this is 
an extern "C" dll export macro

DBoolTest.cpp:

#include "DBoolTest.h"
DBool isAGreaterThanB(int a, int b)
{
     if(a>b)
     {
         return DTrue;
     }
     else
     {
         return DFalse;
     }
}

In D...

main.d:

module main;

import std.stdio;

void main(string[] args)
{

	writeln("Is 1 greater than 2?");
	writeln(isAGreaterThanB(1,2));


	// Lets the user press <Return> before program returns
	stdin.readln();
}

extern(C)
{
	bool isAGreaterThanB(int a, int b);
}


Linking the D program with the C/C++ DLL and running main.exe 
results in the output:

Is 1 greater than 2?
false

D bools are 1 byte, and C/C++ chars are 1 byte as well and it 
works. How safe is it to mix types like this between the two 
languages though? I would rather have a nice clean solution than 
to put together something that is considered "hacky." That said, 
if something like this isn't a big deal, it would make my D code 
more straight forward and a little cleaner.

Any thoughts on this guys?
    Jeremy



More information about the Digitalmars-d-learn mailing list