Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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; // &#194;&#232;&#228;&#237;&#224; &#226;&#229;&#231;&#228;&#229;
int pre_Fn1; // &#194;&#232;&#228;&#237;&#224; &#226;&#229;&#231;&#228;&#229; &#229;&#241;&#235;&#232; &#237;&#229; &#239;&#238;&#236;&#229;&#241;&#242;&#232;&#242;&#252; &#229;&#229; &#226;&#236;&#229;&#241;&#242;&#229; &#241; Rtn1 &#226; &#234;&#238;&#237;&#229;&#246; &#244;&#224;&#233;&#235;&#224;

int Fn1(int Fn1Parm)
{
int in_Fn1; // &#226;&#232;&#228;&#237;&#224; &#242;&#238;&#235;&#252;&#234;&#238; Fn1
if (Fn1Parm > 1)
 return(Fn1Parm + Fn1(Fn1Parm - 1));
else
 return 1;
}

int Rtn1(int Rtn1Parm)
{
int post_Fn1; // &#226;&#232;&#228;&#237;&#224; &#242;&#238;&#235;&#252;&#234;&#238; Rtn1
return 2 * Fn1(Rtn1Parm);
}

int main()
{
int post_Rtn1; // &#205;&#229; &#226;&#232;&#228;&#237;&#224; 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
3-1105039431
MNz
2005-01-06 22:23
2005.02.06
хранение DOC формата


3-1104688120
mihail2209
2005-01-02 20:48
2005.02.06
Вопрос по ClientDataSet - как можно выполнить запрос SQL с ...


3-1104840678
Jey
2005-01-04 15:11
2005.02.06
Фильтрация


8-1098731535
LicProd
2004-10-25 23:12
2005.02.06
Организация массива точек


14-1106200539
syte_ser78
2005-01-20 08:55
2005.02.06
Что за файл DSM?