On Fri, 29 May 2020, Paul Koning via cctalk wrote:
Yes. But the same is true for many languages. Fortran is a particularly good example, but there are plenty of portable languages (Algol, Basic, LISP, Python, COBOL, Ada, RPG, ...). Some more than C; for example, C doesn't like one's complement machines (though it has been ported to at least one) and things get somewhat interesting if the machine doesn't have byte addressing.
Since C aims to be a system implementation language, unlike Fortran or 
Basic or Algol, it tends to expose, or at least let you see, machine 
details.  That can get in the way of portability.  One small example is 
that C thinks address 0 is a null pointer rather than a valid pointer. 
On modern systems that is true (partly because C says so) but on a 
PDP-11 it isn't.
Yes, a pointer to the PC Interrupt Vector Table could be problematic.

C lets you do a lot of things that some other languages will protect you from. Accordingly, Allen Holub titled one of his books about C, "Enough Rope To Shoot Yourself In The Foot"
ISBN-10: 0070296898
ISBN-13: 978-0070296893


Run-time error checking can prevent some types of problems, but using it where it wasn't needed is a significant performance hit. C encourages/forces YOU to write your own run-time error checking and put it in wherever it is needed. And ONLY where it is needed.
Over-simplified example:
X=3;
. . .
. . . if (x==0) break; /* is this needed? IFF x could become 0 */ Z = Y / X; /* a problem IFF X could be zero without run-time checks */ C expects YOU to take responsibility for such things.

Also, example, if you are inconsistent about using bit patterns V numeric value on negative numbers, . . . Numeric range bounds and variable sizes are not constrained, so must be considered in any porting that is done. For example, adding one to integer 32767 or 2147483647 is dependent on number of bits and whether your system is using 2's complement, 1's complement, or some other binary notation for negative numbers.
C makes it EASY to do some totally inappropriate things.
For example, file size in MS-DOS is 32 bits. But it is a SIGNED 32 bits! Resulting in file limits of -2,147,483,648 to 2,147,483,647 YES, in some versions of MS-DOS, you can step on the last four bytess of a directory entry, and it will report a negative file size. Sadly, copying negative sized files to a disk does not increase the free space. Similarly, MS-DOS limits FAT16 volumes to 2147483647 (due to SIGNED 32 bit int?), whereas NT let you have 4,292,967,295 bytes in a FAT16 volume (UNSIGNED 32 bit int?)


"float" is often 32 bit IEEE floating point, but that is not hard coded into the language.
Making assumptions, such as that could be problematic.

Reply via email to