home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11458 < prev    next >
Encoding:
Internet Message Format  |  1992-07-22  |  2.7 KB

  1. Path: sparky!uunet!mcsun!fuug!demos!kiae!glas!demos!usenet.ins!po.CWRU.Edu!jjk
  2. From: jjk@po.CWRU.Edu
  3. Newsgroups: comp.lang.c
  4. Date: 17 Jul 92 18:05 MDT
  5. Subject: Re: Compatibility between Microsoft-C a
  6. Sender: Notesfile to Usenet Gateway <notes@glas.apc.org>
  7. Message-ID: <1992Jul17.140520.8318@usenet.ins>
  8. References: <4z+mbaf.prastogi@netcom.com>
  9. Nf-ID: #R:4z+mbaf.prastogi@netcom.com:1279130672:1992Jul17.140520.8318@usenet.ins:-1056406313:001:2228
  10. Nf-From: po.CWRU.Edu!jjk    Jul 17 18:05:00 1992
  11. Lines: 44
  12.  
  13.  
  14.  
  15. >How different is Microsoft-C Compild module and Borland C compiled modules.
  16. >DO they follow different conventions for generating the assembly code and the
  17. >object code. Is it possible to link object modules and libraries generated by
  18. >different compilers. 
  19.  
  20. So far I've found three major differences:
  21.  
  22.   1.  Microsoft puts the stack in the default data segment regardless
  23.       of memory model, whereas Borland puts the stack in the default data
  24.       segment only in the "small data" models (tiny, small, & medium).
  25.       This is easily taken care of by setting the SS=DS option in the 
  26.       Options | Compiler | Code Generation menu to "Always".
  27.  
  28.   2.  Some of the library's code may access Microsoft-specific globals
  29.       or internal run-time library functions.  If this occurs, your 
  30.       program will not link.  If you have the Microsoft run-time library
  31.       (xLIBCE.LIB) you can link it in to resolve the references.  Two
  32.       warnings:  first, the xLIBCE.LIB must come after the Borland Cx.LIB
  33.       in the link.  Using the IDE puts Cx.LIB last by default.  You must
  34.       provide for this inside your Project window.  Second, there may be
  35.       name collisions for dissimilar items, or functions that behave differ-
  36.       ently.
  37.  
  38.   3.  Finally, the method in which floating point values are returned from
  39.       functions differs.  Borland returns floats, doubles, and long doubles
  40.       on ST(0), or in the floating point emulator's top of stack if you aren't
  41.       using the coprocessor.  Microsoft returns them into static variables.
  42.       (See the Borland C++ Programmer's Guide's "Interfacing With Assembly
  43.       Language" chapter and the Microsoft Macro Assembler Programmer's
  44.       Guide's "Mixed-Language Programming" chapter for full explanations).
  45.       What this basically means is that a Microsoft-generated function calling
  46.       the run-time library will get Borland's function and (a) the function
  47.       will not return the value where the calling function looks for it and
  48.       (b) your floating-point stack overflows quickly, since values are not
  49.       being popped from it.  If anyone has a solution to this problem, I'd
  50.       like to know.
  51.  
  52. Jeff Kellam
  53. banshee@natinst.com
  54. -- 
  55. jjk@po.cwru.edu
  56.  
  57.