----- Original Message -----
From: "vibhor garg" <vibhor_02@yahoo.com>
To: <C-Guru@yahoogroups.com>
Sent: Monday, April 12, 2004 1:19 AM
Subject: [C-Guru] answer plz

> can anyone here answer these questions
>
> 1)What is static identifier?

The `static' specifier has various meanings depending on where it appears.

*   If the `static' storage class specifier appears at the file scope, the
        identifier (an object or function) has internal linkage.

*   The object having the static storage class has following few properties:

        +   Storage is reserved, and initialized prior to program startup.
        +   If the object is in a block scope, it retains its last-stored
            value throughout the execution of the entire program.

*   Following are specific to C99:

        +   If a compound literal occurs outside a function, then it has
            static storage class.
        +   C99 adds another meaning to the `static' specifier.  The following
            declaration,

                void mango ( char a[static 3] );

            guarantees that the pointer "a" (pointing to the first element of
            an array) points to an array containing at least 3 elements.  It
            also guantees that "a" is non-NULL.

    See also question 49 of my FAQ page.


> 2)Where are the auto variables stored?

Generally, they are stored in a stack local to the running program.  As far as
I know, the Standard does not mention where the local variables should go.
See question 11 of my FAQ page, however.

> 3)Where does global, static, local, register
> variables, free memory and C Program instructions get
> stored?

*   These are all implementation defined.  Access to `register' specified
            indentifiers should be as fast as possible, so the compiler may
            place the value in a machine register.  However, the compiler is
            free to treat a `register' declaration as an `auto' declaration.

*   For local and static see, question 11 of my FAQ page.

*   Where free memory is maintained is an OS specific concept.  Instructions
    are generally stored in code segement.

> 4)Difference between arrays and linked list?

Pass.

> 5)What are enumerations?

This is best explained in the K&R section A.8.4, Enumerations.

> 6)What are register variables? What are the advantage
> of using register variables?

*   See the answer to question 3 above.
*   Note the following properties of register storage class:

        +   An array should not be declared with register storage class; doing
            so is an undefined behavior.

        +   Address-of operation(&) can not be applied to an identifier with
            register storage class.

        +   `register' storage class is the only class that can appear in a
            parameter declaration.

        +   The `register' specifier should not occur in an external
            declaration.

> 7)What is the use of typedef?

This is best explained in the K&R section 6.7, Typedef.

> 8)Out of fgets() and gets() which function is safe to
> use and why?

fgets() is always safe to use since gets() does not check for boundry limits.
gets() may overwrite the buffer.

> 9)Difference between strdup and strcpy?

One big difference is strudup() a non-standard function, whereas strcpy() is a
standard function.

> 10)In header files whether functions are declared or defined?

*   They are declared, not defined.  The functions declared in a header file are
            defined in a specific library, and later linked with the application
            program.

> 11)What are macros? what are its advantages and disadvantages?

*   Few advantages are listed without much explanations:

        +   In some situations, macros can be used instead of functions.  Since,
            macros expands into its place of calling, it avoids function call
            overhead.

        +   Macros are used for writing portable code using #if, #ifdef, #ifndef
            and #endif.

            (There are many others)

*   Disadvantages are:

        +   Unwanted side effects, as in

                #define SQUARE(x) x*x

        +   Increase in code size if a substitue macro for a function is used
            heavily.