On Thu, Jun 08, 2006 at 08:36:11AM -0700, Jim Cook wrote: > Is there an online reference for 6.5.2.2, et al.? I don't have a dead-tree > version handy and would be more than happy to research such things myself > before posting questions.
As someone mentioned, N1124 is the best online one. N869 is also available and comes in a plaintext version that may be easier to browse in a text editor, but a downside to N869 is that it's a pre-C99 draft and doesn't exactly match the final standard. N1124 is based on the final C99 document so it should be more accurate. If you need the official (non-draft) versions for some reason, you can purchase them from ANSI or ISO. > Do you have an online reference for the right printf arguments? In N1124 it's in section 7.19.6.1. It states that "L" is used for printing a long double, and that "l" has no effect on "f". > >Also, keep in mind that the actual implementation of "printf" is > >provided by the system's C library, not tcc. > > This answer gave me pause for a while until I realized you meant that when > the TCC binary was compiled, it was _that_ compiler that is responsible. More likely I just don't know enough about how tcc is packaged for Windows. In the Unix world the C compiler and the C library are separated. The compiler doesn't normally provide header files or code for functions such as fprintf and malloc; it assumes you have a C library package installed that will supply them. On Linux the library package is usually glibc or uClibc. On a commercial Unix system it would be provided by the vendor (Sun, Apple, HP, etc). The Unix C library has to implement a lot of very system-specific things, such as the arguments for the ioctl() function, and it's traditionally been easier to let the vendor deal with that stuff. > Windows binary distribution > <http://laurenssimonis.com/tcc/tcc-0.9.23.zip>maintained by Laurens > Simonis. Okay, it looks like he's taken tcc and bundled it with some other things to make it usable on Windows. The header files for example come from the MinGW package. > It appears that using either %lf or %Lf has the same result when passed a > long double. I think what's happening is that tcc (and MinGW) link your program with "msvcrt.dll", which is Microsoft's Visual C++ C runtime library. You end up with Microsoft's implementation of printf. A problem you're going to run into is that Microsoft's C library does not conform to the C standard: http://www.mingw.org/MinGWiki/index.php/C99 Here's what Microsoft had to say about C99 conformance back in 2003: http://msdn.microsoft.com/chats/transcripts/vstudio/vstudio_022703.aspx "In general, we have seen little demand for many C99 features. Some features have more demand than others, and we will consider them in future releases provided they are compatible with C++. It is more likely we'll entertain C99 features if they are picked up in the next version of the C++ standard." > I also happen to know that in the compilers from them, long double > and double are not different, so perhaps that's part of the > strangeness. Right, tcc is linking your code against the same version of printf that those compilers use. According to the MinGW documentation, that printf doesn't actually support long doubles at all: http://www.mingw.org/MinGWiki/index.php/long%20double -Dave Dodge _______________________________________________ Tinycc-devel mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/tinycc-devel
