[3] The term was coined by Christopher Strachey in the context of "functions as first-class citizens" in the mid-1960s.
In the language C: There are a number of differences between the two approaches that are not directly related to the support of first-class functions.
Both are the most natural compound data structures in the respective languages and making the C sample operate on linked lists would have made it unnecessarily complex.
Forcing the closure at a later point will result in undefined behaviour, possibly corrupting the stack.
In category-theoretical accounts of programming, the availability of first-class functions corresponds to the closed category assumption.
For instance, the simply typed lambda calculus corresponds to the internal language of Cartesian closed categories.
Many scripting languages, including Perl, Python, PHP, Lua, Tcl/Tk, JavaScript and Io, have first-class functions.
For imperative languages, a distinction has to be made between Algol and its descendants such as Pascal, the traditional C family, and the modern garbage-collected variants.
The reason for this was that it was not known how to deal with non-local variables if a nested-function was returned as a result (and Algol 68 produces runtime errors in such cases).
Modern imperative languages often support garbage-collection making the implementation of first-class functions feasible.