Criticism of the C programming language: Difference between revisions

Content deleted Content added
m Convert text to hypertext
Compare C to Fortran
Line 16:
 
===Arrays===
Although C supports static arrays, it is not required that array indexes be validated ([[bounds checking]]). For example, one can write to the sixth element of an array with five elements, yielding generally undesirable results. This type of bug, called a ''[[buffer overflow]],'' has been notorious as the source of a number of security problems. On the other hand, since [[bounds checking elimination]] technology was largely nonexistent when C was defined, bounds checking came with a severe performance penalty, particularly in numerical computation. By comparison, a few years earlier, [[Fortran]] compilers had a switch to toggle bounds checking on or off.
 
Multidimensional arrays are commonly used in numerical algorithms (mainly from applied linear algebra) to store matrices. The structure of the C array is particularly well suited to this particular task, provided one remembers to count indices starting from 0 instead of 1. This issue is discussed in the book ''[[Numerical Recipes|Numerical Recipes in C]]'', chapter 1.2, page 20''ff'' ([http://www.library.cornell.edu/nr/bookcpdf/c1-2.pdf read online]). In that book there is also a solution based on negative indexing which introduces other dangers. Starting indices at 0 has been assimilated into the computing culture, and is no longer as alien a notion as it seemed when C was first introduced.