6

see this code

#include<stdio.h>

int main()
{
    void test(void)
    {
        printf("test");
        return;
    }
printf("main");
return 0;
}

this coed works fine and doesnt give any warning and error. I am not getting why this happening ? here i have written one function definition inside other function definition so is it valid?

EDIT: if yes then is there any usage of this ?

Why gcc needs to add this features as extension..there should be any usage of this isnt it ?!

Jeegar Patel
  • 26,264
  • 51
  • 149
  • 222
  • 1
    Looks like a duplicate of :http://stackoverflow.com/questions/666586/are-nested-functions-part-of-c-standard You might be interested to see:http://stackoverflow.com/questions/1348095/why-are-nested-functions-not-supported-by-the-c-standard & http://www.informit.com/articles/article.aspx?p=1676713 – another.anon.coward Nov 11 '11 at 07:52
  • @another.anon.coward thanks for those link... – Jeegar Patel Nov 11 '11 at 07:57

5 Answers5

7

Nesting of function definitions relies on a GCC extension to work. It is not described by the standard.

If you have any desire for your code to work with other compilers then you should refrain from using such techniques. What's more, if you collaborate with other developers, I predict that many of them will dislike the use of such non-standard constructs.

I'm not expert with GCC but I'm fairly sure there are compiler options to disable extensions. This will allow you to get the compiler to make sure you are not writing code that won't compile with other compilers.


Regarding your update there are uses for nested functions. They can aid encapsulation by restricting scope and visibility. However, there is no problem that cannot be solved perfectly adequately without nested functions which I think explains why they are a rarely used GCC peculiarity.

David Heffernan
  • 601,492
  • 42
  • 1,072
  • 1,490
3

Defining a nested function (i.e. inside another function) is valid, the only limitation is that the former function's scope is limited by the enclosing function. It's just like defining a local variable. You can find more information here: http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

Romi Halasz
  • 1,949
  • 1
  • 13
  • 23
2

Yes we can define a function in other function. I have compiled below written lines in gcc and it ran successfully without showing an error.

#include<stdio.h>;
void main()
{
    int sum()
    {
        int a=30, b=10, c=20, sum=0;
        sum=a+b+c;
        return sum;
    }
    int a;
    a=sum();
    printf("Sum = %d", a);
}

O/p:60

sachleen
  • 30,730
  • 8
  • 78
  • 73
Swami
  • 21
  • 1
2

Joachim's answer about nested functions being a GCC extension is correct; you also asked if there is any usage of it: I've seen source code from hundreds of projects and never once seen anyone using this particular GCC extension.

sarnold
  • 102,305
  • 22
  • 181
  • 238
1

I know that GCC has this as an extension. It's not, as far as I know, part of the standard.

Some programmer dude
  • 400,186
  • 35
  • 402
  • 621