digitalmars.D - 64-bit D and interfacing with C
- David Friedman (23/23) Feb 18 2007 Many of the Phobos modules that interface C currently use 'int' and
- Sean Kelly (5/30) Feb 18 2007 For what it's worth, Tango has a module called tango.stdc.config which
- Gregor Richards (4/29) Feb 18 2007 I was arguing for this to make bcd.gen more robust, but everybody shot
Many of the Phobos modules that interface C currently use 'int' and 'uint' when the actual C declaration is 'long' or 'unsigned long'. This works 32-bit sytems, but not for most 64-bit sytems. Should there be a standard definition for the C long and unsigned long types? My current solution is to add 'Clong_t' and 'Culong_t' to the std.stdint module: version(GNU) { import gcc.builtins; alias __builtin_Clong Clong_t; alias __builtin_Culong Culong_t; } else /* For DMD: */ version(X86_64) { // Needs more conditionals for LP64 vs. LLP64... alias long Clong_t; alias ulong Culong_t; } else { alias int Clong_t; alias uint Culong_t; }
Feb 18 2007
David Friedman wrote:Many of the Phobos modules that interface C currently use 'int' and 'uint' when the actual C declaration is 'long' or 'unsigned long'. This works 32-bit sytems, but not for most 64-bit sytems. Should there be a standard definition for the C long and unsigned long types? My current solution is to add 'Clong_t' and 'Culong_t' to the std.stdint module: version(GNU) { import gcc.builtins; alias __builtin_Clong Clong_t; alias __builtin_Culong Culong_t; } else /* For DMD: */ version(X86_64) { // Needs more conditionals for LP64 vs. LLP64... alias long Clong_t; alias ulong Culong_t; } else { alias int Clong_t; alias uint Culong_t; }For what it's worth, Tango has a module called tango.stdc.config which defines the symbols c_long and c_ulong. stdint sounds like a good place for these decls if an existing module is preferred. Sean
Feb 18 2007
David Friedman wrote:Many of the Phobos modules that interface C currently use 'int' and 'uint' when the actual C declaration is 'long' or 'unsigned long'. This works 32-bit sytems, but not for most 64-bit sytems. Should there be a standard definition for the C long and unsigned long types? My current solution is to add 'Clong_t' and 'Culong_t' to the std.stdint module: version(GNU) { import gcc.builtins; alias __builtin_Clong Clong_t; alias __builtin_Culong Culong_t; } else /* For DMD: */ version(X86_64) { // Needs more conditionals for LP64 vs. LLP64... alias long Clong_t; alias ulong Culong_t; } else { alias int Clong_t; alias uint Culong_t; }I was arguing for this to make bcd.gen more robust, but everybody shot it down ... not with any good excuse, just because they're jerks :) - Gregor Richards
Feb 18 2007