Well, while we are digressing ... There was discussion earlier of the use of the equal sign for assignment versus comparison.
I am going to guess that THE most common cause of C/C++ program errors is the mis-use of = for comparison. (The comparison operator in C and C++ is ==.) In C if you code if (foo = 3) bar = 5; Then the compiler generates code to assign 3 to foo, test the result (3) for truth (not 0) and then execute the conditional statement. The above has the same effect as foo = 3; bar = 5; If I am recalling the story correctly, a malicious programmer *almost* succeeded in inserting code into the Linux kernel of the form if (uid = 0) ... The code appears to be testing the uid for 0, but in reality is making the uid 0. Someone who know how to get to the code path could make themselves into superuser. I like := for assignment, but I believe C eliminated the ambiguity of = by choosing == for comparison, by analogy to all of the other 2-character comparison operators (>=, !=, etc.).= Charles -----Original Message----- From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf Of Bernd Oppolzer Sent: Tuesday, March 29, 2022 1:57 PM To: [email protected] Subject: Re: PL/I question As it seems from other posts, the story is not completely true; there was indeed such an error somewhere sometime with NASA, but the error that destroyed the Mariner spacecraft was different (a missing hyphen on a hand-written variable specification, which had not been translated correctly to computer code). I believe that there are similar pitfalls in other languages, too, although FORTRAN is very special, because it allows spaces even in the middle of identifiers (and numbers), such as DO 3 I = 1 . 10 which in every other programming language would disqualify as an assignment statement because of the spaces around the DO symbol. My favorite PL/1 example from a real world program is this: IF 9 < ZZ < 20 THEN DO; ... ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
