Re: Определение функции внутри другой функции

Alex Naumov alexander_naumov at opensuse.org
Tue Dec 2 06:12:25 EST 2014


#include <stdio.h>

int main()
{
    int hello();
    int a;
    a = hello();
    printf("%d\n", a);
    a = hello2();
    printf("%d\n", a);
    return 0;//hello();
}

int hello()
{
    int hello2();
    printf("Hello\n");
    return 1;
}

int hello2()
{
    return 2;
}


По идеи hello2() объявляется внутри hello(), тем не менее hello2() видна и
после выполнения hello(). А как же локальные переменные, которые должны
быть уничтожены после выполнения hello()? Адрес на hello2() остается, т.е.
мы имеем дело с внешним связыванием, несмотря на то, что функция не
обявлена за пределами какого-то блока.

2014-12-02 12:04 GMT+01:00 Alex Naumov <alexander_naumov at opensuse.org>:

> Я работаю с gcc 4.8.1 на x86_64. Мне, в принципе, больше ничего и не надо,
> т.е. код пишу для себя.
>
> Дело даже не в том, на сколько это полезно и в каких случаях. Мне просто
> интересно какие могут быть проблемы в данном случае. Стоит ли быть тревогу,
> если встречается такой код?
> Вот Андрей написал о проблеме переноса кода на другие архитектуры. Это да.
> Код всегда нужно тестировать при переносе. Но может быть есть проблемы,
> которые можно встретить в данном случае с 100% вероятностью?
>
> 2014-12-02 11:31 GMT+01:00 Denis Kirjanov <kirjanov at gmail.com>:
>
>> А какие компиляторы ты пробовал?
>>
>> Я просто не понимаю зачем это может быть полезно. Я не видел кода на C
>> который использует nested functions.
>>
>> On 12/2/14, Alex Naumov <alexander_naumov at opensuse.org> wrote:
>> > Мне не совсем понятно значение "do not support" в данном контексте. Это
>> > работет.
>> > Поведение программы не определено, т.е. никогда нельзя знать наверняка
>> как
>> > поведет себя программа в данном случае?
>> >
>> >
>> > 2014-12-02 11:10 GMT+01:00 Denis Kirjanov <kirjanov at gmail.com>:
>> >
>> >> Standard C and C++ do not support nested functions, but:
>> >> GCC supports nested functions in C, as a language extension.[5]
>> >>
>> >> On 12/2/14, Alex Naumov <alexander_naumov at opensuse.org> wrote:
>> >> > Всем привет.
>> >> >
>> >> > У К&R в 4.3 главе написано:
>> >> > "Сами по себе функции - всегда внешние, поскольку в C нельзя
>> определить
>> >> > функцию внутри другой функции."
>> >> >
>> >> > Тем не менее, определить функцию f() внутри тела функции main() и
>> >> > вызвать
>> >> > её можно без проблем. Более того, в главе 4.2 у K&R присутствует
>> такой
>> >> > пример. Кто что думает по поводу объявления функций внутри других
>> >> функций?
>> >> > Какие подводные камни ожидают программиста в этом случае?
>> >> >
>> >> >
>> >> > Alex
>> >> >
>> >>
>> >>
>> >> --
>> >> Regards,
>> >> Denis
>> >>
>> >
>>
>>
>> --
>> Regards,
>> Denis
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernel-russian/attachments/20141202/75ef18f5/attachment.html 


More information about the Kernel-russian mailing list