[Last modified July 3, 2004 by scs.]
This article is Copyright 1990-2004 by Steve Summit. Content from the
book _C Programming FAQs: Frequently Asked Questions_ is made available
here by permission of the author and the publisher as a service to the
community. It is intended to complement the use of the published text
and is protected by international copyright laws. The on-line content
may be accessed freely for personal use but may not be republished
This article contains minimal answers to the comp.lang.c frequently-
asked questions list. More detailed explanations and references can be
found in the long version (posted on the first of each month, or see
question 20.40 for availability, or ftp to rtfm.mit.edu, or send the
mail message "help" to mail- XXXX@XXXXX.COM ). Or, see the web
version at http://www.eskimo.com/~scs/C-faq/top.html , or the book
_C Programming FAQs: Frequently Asked Questions_ (Addison-Wesley,
Section 1. Declarations and Initializations
1.1: How should I decide which integer type to use?
A: If you might need large values (tens of thousands), use long.
Otherwise, if space is very important, use short. Otherwise,
1.4: What should the 64-bit type be on a machine that can support it?
A: C99 specifies long long.
1.7: What's the best way to declare and define global variables?
A: The best arrangement is to place each definition in some
relevant .c file, with an external declaration in a header file.
1.11: What does extern mean in a function declaration?
A: Nothing, really; the keyword extern is optional here.
1.12: What's the auto keyword good for?
1.14: I can't seem to define a linked list node which contains a
pointer to itself.
A: Structures in C can certainly contain pointers to themselves;
the discussion and example in section 6.5 of K&R make this
clear. Problems arise if an attempt is made to define (and use)
a typedef in the midst of such a declaration; avoid this.
1.21: How do I declare an array of N pointers to functions returning
pointers to functions returning pointers to char?
A: char *(*(*a[N])())();
Using a chain of typedefs, or the cdecl program, makes these
1.25: My compiler is complaining about an invalid redeclaration of a
function, but I only define it once.
A: Calling an undeclared function declares it implicitly as
1.25b: What's the right declaration for main()?
A: See questions 11.12a through 11.15.
1.30: What am I allowed to assume about the initial values of
variables which are not explicitly initialized?
A: Uninitialized variables with "static" duration start out as 0,
as if the programmer had initialized them. Variables with
"automatic" duration, and dynamically-allocated memory, start
out containing garbage (with the exception of calloc).
1.31: Why can't I initialize a local array with a string?
A: Perhaps you have a pre-ANSI compiler.
1.31b: What's wrong with "char *p = malloc(10);" ?
A: Function calls are not allowed in initializers for global or
1.32: What is the difference between char a = "string"; and
char *p = "string"; ?
A: The first declares an initialized and modifiable array; the