Differences Between ANSI C89 and ISO C90

The transition from the original ANSI C89 standard to the international ISO C90 standard represented the formal globalization of the C programming language. While both specifications describe fundamentally the exact same language with identical technical features, the ISO adoption introduced structural renumbering, editorial revisions to satisfy international formatting guidelines, and transferred future stewardship of the language to an international committee.

Technical Equivalence

From a pure programming and compiler perspective, ANSI C89 (ANSI X3.159-1989) and ISO C90 (ISO/IEC 9899:1990) are identical. No new language keywords, syntax rules, semantic behaviors, or standard library functions were added during the initial ISO adoption. Code written to conform to ANSI C89 compiles and executes identically under an ISO C90-compliant compiler. Because of this technical parity, the terms "C89" and "C90" are routinely used interchangeably by developers and toolchain maintainers.

Structural and Clause Renumbering

The most significant divergence between the two documents is how the text is structured. ISO maintains strict document drafting directives that differed from the format used by the American National Standards Institute (ANSI).

To conform to ISO layout rules:

  • ANSI’s top-level sections were reclassified as clauses.
  • Introductory and administrative sections were reordered and expanded to include standard ISO boilerplate (such as dedicated Scope, Normative References, and Definitions clauses).
  • As a result of this insertion, the technical content shifted. For example, ANSI Section 3 (Language) became ISO Clause 6, and ANSI Section 4 (Library) became ISO Clause 7.

Editorial and Terminology Adjustments

ISO editors made minor textual corrections and terminology adjustments throughout the specification to ensure clear international application. American-specific conventions and colloquial drafting styles present in the original X3.159 document were normalized to align with the standard technical English used in international documentation. Additionally, typographical errors identified in the initial 1989 ANSI publication were corrected in the 1990 ISO release.

Shift in Standardization Stewardship

The publication of ISO/IEC 9899:1990 shifted the primary maintenance of C from ANSI's X3J11 committee to the ISO/IEC JTC 1/SC 22/WG 14 international working group. ANSI subsequently adopted ISO/IEC 9899:1990 as the national standard for the United States, withdrawing the original ANSI X3.159-1989 designation.

This governance shift set the stage for subsequent standardized extensions, most notably Normative Addendum 1 (ISO/IEC 9899/AMD1:1995), which introduced digraphs and extensive multibyte and wide-character support (<wchar.h> and <wctype.h>) directly into the ISO baseline before the development of C99.