Nested function in C

前端 未结 9 1581
眼角桃花
眼角桃花 2020-11-22 12:24

Can we have a nested function in C? What is the use of nested functions? If they exist in C does their implementation differ from compiler to compiler?

相关标签:
9条回答
  • 2020-11-22 12:42

    Or you can be smart about it and use the preprocessor in your advantage (source.c):

    #ifndef FIRSTPASS
    #include <stdio.h>
    
    //here comes your "nested" definitions
    #define FIRSTPASS
    #include "source.c"
    #undef FIRSTPASS
    
    main(){
    #else
        int global = 2;
        int func() {printf("%d\n", global);}
    #endif
    #ifndef FIRSTPASS
        func();}
    #endif
    
    0 讨论(0)
  • 2020-11-22 12:42

    is this not a nested function in C? ( the function displayAccounts() )

    I know I could have defined the function differently and passed variables and what not but anyhow works nicely as I needed to print the accounts multiple times.

    (snipet taken from a school assignment)...

    //function 'main' that executes the program.
    int main(void)
    {
        int customerArray[3][3] = {{1, 1000, 600}, {2, 5000, 2500}, {3, 10000, 2000}};  //multidimensional customer data array.
        int x, y;      //counters for the multidimensional customer array.
        char inquiry;  //variable used to store input from user ('y' or 'n' response on whether or not a recession is present).
    
        //function 'displayAccounts' displays the current status of accounts when called.
        void displayAccounts(void)
        {
            puts("\t\tBank Of Despair\n\nCustomer List:\n--------------");
            puts("Account #    Credit Limit\t  Balance\n---------    ------------\t  -------");
            for(x = 0; x <= 2; x++)
            {
                for(y = 0; y <= 2; y++)
                    printf("%9d\t", customerArray[x][y]);
                puts("\n");
            }
        }
    
        displayAccounts();  //prints accounts to console.
        printf("Is there currently a recession (y or n)? ");
    
    
    //...
    
        return 0;
    }
    
    0 讨论(0)
  • 2020-11-22 12:44

    I mention this as many people coding in C are now using C++ compilers (such as Visual C++ and Keil uVision) to do it, so you may be able to make use of this...

    Although not yet permitted in C, if you're using C++, you can achieve the same effect with the lambda functions introduced in C++11:

    void f()
    {
        auto g = [] () { /* Some functionality */ }
    
        g();
    }
    
    0 讨论(0)
  • 2020-11-22 12:44

    To answer your second question, there are languages that allow defining nested functions (a list can be found here: nested-functions-language-list-wikipedia).

    In JavaScript, which is one of the most famous of those languages, one may of nested functions (which are called closures) are:

    • To create class methods in constructors of objects.
    • To achieve the functionality of private class members along with setters and getters.
    • Not to pollute the global namespace (that goes for every language, of course).

    to name a few...

    0 讨论(0)
  • 2020-11-22 12:49

    You cannot define a function within another function in standard C.

    You can declare a function inside of a function, but it's not a nested function.

    gcc has a language extension that allows nested functions. They are nonstandard, and as such are entirely compiler-dependent.

    0 讨论(0)
  • 2020-11-22 12:52

    As others have answered, standard C does not support nested functions.

    Nested functions are used in some languages to enclose multiple functions and variables into a container (the outer function) so that the individual functions (excluding the outer function) and variables are not seen from outside.

    In C, this can be done by putting such functions in a separate source file. Define the main function as global and all the other functions and variables as static. Now only the main function is visible outside this module.

    0 讨论(0)
提交回复
热议问题