🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Leif Andrew Rump Mon, 24 Jun 1991 12:48
C++, Bjarne stroustrup, #define, evaluation order, ...
#1339
Author: Leif Andrew Rump
Date: Mon, 24 Jun 1991 12:48
85 lines
2966 bytes
I've got my hands on Borland C++ (2.0) and I love it (not Borland, but
C++ - well ok bc is also really nice :-)  ). I've been reading some books
to really get the spirit and I've stumpled into some things that I don't
like and I also have some questions:

In "The C++ Programming Language" by Bjarne Stroustrup (December 1986,
it's not the updated C++ version (2.0 or 2.1)) he states on page 87:

	a*(b/c) could well be calculated as (a*b)/c

Is this (still) the case? I tried the following:

	int	a = 16000;
	int	b = 10;
	int	c = 5;

on bc a*(b/c) worked as expected and gave 32000 and (a*b)/c
gave (0x27100 / 5 -> 0x7100 / 5): 5785 i.e. overflow loss.

I was a bit surprised when this didn't compile:
	for (int i = 0; i < 10; i++)
	...
	for (int i = 0; i < 10; i++)
Instead it is:
	for (int i = 0; i < 10; i++)
	...
	for (i = 0; i < 10; i++)
hmmm! I know that i is not in a "block" but ...

On page 131 he states:

	Here are some plausible macros:
		#define	Case	break; case
		#define	nl	<< "\n"
		#define	forever	for (;;)
		...
	Here are some completely unnecessary macros:
		#define	PI	3.141593
		#define	BEGIN	{
		#define	END	}
Should BEGIN & END be enumerated types or what is wrong with them?
(NOTE: I don't use them even though I'm a Turbo Pascal programmer,
but I do something similar as described below).

I've brought the following from TP5.5 (and define it in andrew.h):
	#define	constructor
	#define	destructor	~

This way I can write a class like this:
	class object
	{
	  name_t	name;

	public :
	  constructor object(name_t name)
	  {
	    object::name = new char[strlen(name) + 1];

	    strcpy(object::name, name);
	  }
	  ...
	  destructor object(void)
	  {
	    delete name;
	  }
	}

Does all C++-compilers allow the ~ to be separated from the class name,
like: ~ object(void) as it is expanded above. 

Also I overloaded: hex, oct & dec with hex(int, len = 0), ... like the
old iostream. Why was they removed.

Any comments?

Leif Andrew Rump, AmbraSoft A/S, Stroedamvej 50, DK-2100 Copenhagen OE, Denmark
UUCP: andrew@ambra.dk, phone: +45 39 27 11 77                /
Currently at Scandinavian Airline Systems                =======/
UUCP: andrew@resam.dk, phone: +45 32 32 51 54                \
SAS, RESAM Project Office, CPHML-V, P.O.BOX 150, DK-2770 Kastrup, Denmark

                If it's broke, fix it (The MS-DOS way)
            If it aint broke, don't touch it (The Unix way)
	If we can't fix it, it ain't broke (Maintainer's Motto)
             If you can't fix it, fuck it (The U-boat way)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads