Текущий архив: 2005.02.06;
Скачать: CL | DM;
Вниз
Локальные функции в C++ Найти похожие ветки
← →
olookin © (2005-01-15 16:24) [0]Как декларировать локальные функции в Си? Заранее спасибо.
← →
Sergey_Masloff (2005-01-15 16:39) [1]Язык не поддерживает. Используй классы C++ или помещай объявление в такое место чтобы ее видели только кому можно если на простом Це
← →
Sergey_Masloff (2005-01-15 16:56) [2]
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
pre_Rtn1: longint; {Видна везде в программе}
{-----------------------------------------------------------------------------}
function Rtn1(R1Parm : longint): longint;
var
pre_Fn1: longint; {Видна для Rtn1 и Fn1}
{-------------------------------------------------------------------------}
function Fn1(F1Parm: longint): longint;
var
in_Fn1: longint; {Видна только Fn1}
begin
if F1Parm > 1 then
Result := F1Parm + Fn1(F1Parm - 1)
else
Result := 1;
end;
{-------------------------------------------------------------------------}
var
post_Fn1: longint; {Видна только Rtn1}
begin
Rtn1 := 2 * Fn1(R1Parm);
end;
{----------------------------------------------------------------------------}
var
post_Rtn1: longint; {Не видна ни Rtn1 ни Fn1}
begin
Writeln("Rtn1(10) = ",Rtn1(10));
Readln;
end.
см. дальше
← →
olookin © (2005-01-15 17:00) [3]Возможно, я просто перепутал языки. Не знаю, какой язык используется в Microsoft Visual C++?
Вроде бы Си++. А как же тогда насчет сообщения компилятора "Local function declaration are illegal" в таком вот коде:
double ModelElectro::Func_n1(double Value)
{
double intFunc_n1(double Value)
{
return 0;
}
return 1;
}
Значит все-таки возможно использование локальных функций?
← →
Sergey_Masloff (2005-01-15 17:03) [4]
#include <windows.h>
#include <stdio.h>
int pre_Rtn1; // Âèäíà âåçäå
int pre_Fn1; // Âèäíà âåçäå åñëè íå ïîìåñòèòü åå âìåñòå ñ Rtn1 â êîíåö ôàéëà
int Fn1(int Fn1Parm)
{
int in_Fn1; // âèäíà òîëüêî Fn1
if (Fn1Parm > 1)
return(Fn1Parm + Fn1(Fn1Parm - 1));
else
return 1;
}
int Rtn1(int Rtn1Parm)
{
int post_Fn1; // âèäíà òîëüêî Rtn1
return 2 * Fn1(Rtn1Parm);
}
int main()
{
int post_Rtn1; // Íå âèäíà Rtn1 b Fn1
printf("Rtn1(10) = %d\n\n",Rtn1(10));
getchar();
return 0;
}
← →
Sergey_Masloff (2005-01-15 17:04) [5]блин долбаный юникод
#include <windows.h>
#include <stdio.h>
int pre_Rtn1; // Видна везде
int pre_Fn1; // Видна везде если не поместить ее вместе с Rtn1 в конец файла
int Fn1(int Fn1Parm)
{
int in_Fn1; // видна только Fn1
if (Fn1Parm > 1)
return(Fn1Parm + Fn1(Fn1Parm - 1));
else
return 1;
}
int Rtn1(int Rtn1Parm)
{
int post_Fn1; // видна только Rtn1
return 2 * Fn1(Rtn1Parm);
}
int main()
{
int post_Rtn1; // Не видна Rtn1 b Fn1
printf("Rtn1(10) = %d\n\n",Rtn1(10));
getchar();
return 0;
}
← →
Sergey_Masloff (2005-01-15 17:14) [6]вот C++
#include <windows.h>
#include <stdio.h>
class cPackageRtn1
{
public:
cPackageRtn1(void);
int Rtn1(int Rtn1Parm);
private:
int pre_Fn1; // Видна только для Rtn1 и Fn1
int Fn1(int Fn1Parm); // Видна только для Rtn1
};
int pre_Rtn1; // Видна везде в программе
cPackageRtn1::cPackageRtn1(void){}
int cPackageRtn1::Fn1(int Fn1Parm)
{
int x; // Видна только Fn1
if (Fn1Parm > 1)
return (Fn1Parm + Fn1(Fn1Parm - 1));
else
return 1;
}
int cPackageRtn1::Rtn1(int Rtn1Parm)
{
int post_Fn1; // Видна только Rtn1
pre_Fn1 = 0;
return 2 * Fn1(Rtn1Parm);
}
int post_Rtn1; // Не видна ни Rtn1 ни Fn1
int main()
{
cPackageRtn1 fred;
printf("fred.Rtn1(10) = %d\n\n",fred.Rtn1(10));
getchar();
return 1;
}
← →
Sergey_Masloff (2005-01-15 17:15) [7]Все примеры компилируются и выполняются.
А компилятор тебе честно говорит что нельзя объявлять локальные функции так как не поддерживаются.
← →
olookin © (2005-01-15 18:05) [8][7] Sergey_Masloff (15.01.05 17:15)
Спасибо.
← →
Вадя (2005-01-16 16:57) [9]olookin © (15.01.05 17:00) [3]
В С++ нельзя объявлять ф-цию в ф-ции, как это делается в Pascal.
Страницы: 1 вся ветка
Текущий архив: 2005.02.06;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.047 c