В каком стандарте С можно определять функции внутри main?:
void main(){
void func1(){
...
}
...
}
стандарт c
Модератор: Модераторы разделов
-
drakosha
- Сообщения: 10
- ОС: ArchLinux current
Re: стандарт c
Никогда не слышал про C в котором можно определять функцию в функции.
Registered Linux user #312804
-
Liksys
- Сообщения: 2910
Re: стандарт c
Действительно, зачем?
Можно, кстати, внутри функции определить блок типа {...} со своими переменными, которые не бодут доступны извне.
Можно, кстати, внутри функции определить блок типа {...} со своими переменными, которые не бодут доступны извне.
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: стандарт c
хм... а в каком нельзя?В каком стандарте С можно определять функции внутри main?
Код: Выделить всё
elide@serenity| ~/exp/c >> cat inner_funcs.c
#include <stdio.h>
int f(void);
int main(){
int f(void){
return printf("test\n");
}
return f();
}
elide@serenity| ~/exp/c >> gcc -std=c89 -Wall -o inner inner_funcs.c
elide@serenity| ~/exp/c >> ./inner
test
elide@serenity| ~/exp/c >> gcc -std=c99 -Wall -o inner inner_funcs.c
elide@serenity| ~/exp/c >> ./inner
test
elide@serenity| ~/exp/c >> gcc -std=c9x -Wall -o inner inner_funcs.c
elide@serenity| ~/exp/c >> ./inner
test
elide@serenity| ~/exp/c >>слава роботам!
-
Бодрый и Веселый
- Сообщения: 66
- ОС: What?
Re: стандарт c
а _зачем_?
Для того чтобы не плодить в общей оласти видимости ненужных функций.
Это ограниченине больше относится к c++. Можно обойти:
Код: Выделить всё
#include <stdio.h>
int main(){
struct {
int operator()() {
return printf("test\n");
}
} f;
return f();
}-
oav
- Бывший модератор
- Сообщения: 296
Re: стандарт c
Бодрый и Веселый писал(а): ↑06.12.2006 20:00Для того чтобы не плодить в общей оласти видимости ненужных функций.
Это ограниченине больше относится к c++. Можно обойти:
Ну коли уж было произнесено слово С++, то пожалуйста (и без всякого мракобесия типа вложенных функций):
Код: Выделить всё
#include <iostream>
namespace
{
void superLocalFunction()
{}
int mySuperLocalData;
}
int main()
{
superLocalFunction();
return 0;
}называется anonymous namespaces. Не оно?
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
-
oav
- Бывший модератор
- Сообщения: 296
Re: стандарт c
их extern'ом не достать - чисто локальные имена на одну единцу трансляции. Хотя вот я это написал и тутже захотелось в стандарт слазить - забыл ужо всё, чёртов С# все мозги вытряс. Но поздно уже, завтра слазию...
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: стандарт c
Ты и static extern-ом не достанешь. Он не экспортируется из объектного файла.
-
shnek
- Сообщения: 10
- ОС: Fedora Core 6
Re: стандарт c
В ANSI C этого нет, но GNU включает некоторые свойства, которых нет в ANSI. Одним из них и являются вложенные функции.
-
fatboy
- Сообщения: 156
- ОС: Zenwalk Linux, Windows XP
Re: стандарт c
насколько я знаю, gcc работает со стандартом ISO а не ANSI. Посмотри этот стандарт на предмет интересующего тебя вопроса.
Zenwalk 4.0
TOSHIBA Satellite A100
TOSHIBA Satellite A100
-
Paul7
- Сообщения: 40
Re: стандарт c
Ответ: можно в ANSI/ISO C99, нельзя в более ранних стандартах.
HP i2000 Dual Itanium / Debian Sarge & Win2k3
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00