Автор Тема: Структура на функция  (Прочетена 1927 пъти)

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Структура на функция
« -: Oct 15, 2005, 19:24 »
Здравейте. опитвам с еда програмирам на C. Имам един въпрос свързан с функциите. Програмата е следната :

Примерен код


        #include<stdio.h>
        #include<conio.h>



        main()
        {
        int x,y,s;
                y=2;
                s=2;
                x=sbor(s,y);
                printf("sbora ma a i b e : %d ",x);
                getch();
        }

        int sbor(a,b)
        int a,b;
        {
                int c;
                         c=a+b;
                         return (c);
        }


тук дава грешка. грешка в структурата. а тук:
Примерен код



        #include<stdio.h>
        #include<conio.h>

        int sbor(a,b)
        int a,b;
        {
                int c;
                         c=a+b;
                         return (c);
        }


        main()
        {
        int x,y,s;
                y=2;
                s=2;
                x=sbor(s,y);
                printf("sbora ma a i b e : %d ",x);
                getch();
        }


върви правилно. Излиза че извикващата функция трябва да е след извиканата. Но в учебника който ползвам не пише че е така. Някой да знае как е всъщност, и дали имам грешки в конструкцията?
Активен

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Структура на функция
« Отговор #1 -: Oct 15, 2005, 21:43 »
1-во книгата ,която ползваш е стара или по-точно не  е по ANSI C или може би по правилно не е по съвременния С.

Защо , защото ползваш старата декларация на функции новата и съвременна е:

Примерен код

type func(type arg1, type arg2)
{

 ...

 return _something_
}


func не може да е тип void - по "правилник" де '<img'>
функ. винаги трябва да връза резултат. има го на доста места подробно обяснено.

Коя книга ползваш ?

2-ро

На моменти малко се бъркам с дефиниране и деклариране,
мисля че прваилното е обяснение е следнот.
т.е знам как стоят нещата, но не съм сигурен ,ч е ще мога да го обясня правилно.


Значи в С имаш два вариант , когато искаш да ползваш функции.

Или (1) те се декларират преди функцията , която ги използва -> най-често всички твой функции са преди main(), т.е main() е последната; или (2) функциите се дефинират и могат да се декларират където си поискаш преди или след функцията , която ги ползва.


Как се дефинира функция.

твойта функция:

Примерен код

int sbor(int a, int b);

забележи ; накрая !

функциите се дефинират в началото на кода.
или да го кажа така след хедърните файлове и преди main()
а декларацията, където си поискаш, но щом си дефинирал значи след main().

поне така знам аз , че е редно , а и е логично '<img'>

Твоя пример:

Примерен код


#include <stdio.h>
#include <conio.h>

int sbor(int a, int b);

int main(void)
{

        int x,y,s;
               y=2;
               s=2;
               x=sbor(s,y);
               printf("sbora na a i b e : %d ",x);
               getch();
     /*гледай да не ползваш нестандр. С функц. за стандартни неща*/

        return 0; // 0 or 1 means clean exit;)

}


int sbor(int a, int b)
{

            int c;  
 //аз лично правя разстояние м/у деф. на променливите

            c=a+b;
//самата работа

            return c;
/* и връщането на резултата, затова дори твойте 3-реда
ги разделям така;) */
}


вместо шльокавица ползвай английски , хем си подобряваш английския, хем е разбираемо и за теб и за всеки програмист - щото програмист без английски трудно , не че няма много ресури на руски или немски примерно , но '<img'>
ясно ти е.

успех ...

бтв: conio.h - е дос. хедърен файл , така че си мисля ,че темата ти няма общо с linux-bg.org , освен ако не разработваш open source проект '<img'>
Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Структура на функция
« Отговор #2 -: Oct 16, 2005, 00:46 »
Мерси много, уча по една жълта книга на C на "Издателство Техника" на Д. Богданов и И.Мустакеров.
Имам още 1 книга по ANSI, но предпочитам първо да хвана основите защото тя е за по-напреднали..

Цитат

Или (1) те се декларират преди функцията , която ги използва -> най-често всички твой функции са преди main(), т.е main() е последната; или (2) функциите се дефинират и могат да се декларират където си поискаш преди или след функцията , която ги ползва.



Само не разбрах кога може да се използва първия и кога втория. От какво зависи.
Както и да е, мерси за изчерпателния отговор. Колкото за conio.h, използвам я за getch(); ,за да не се затваря програмата веднага, а да чака да въведа символ.
Активен

Gesha123

  • Участници
  • ***
  • Публикации: 9
    • Профил
Структура на функция
« Отговор #3 -: Oct 16, 2005, 16:57 »
Относно първия въпрос наистина общия вид на дифиниране на функция е този
return_type  name_of_func(type a,type b..)
{
return  x; //
}
като това дали ще  се използват прототипи на функциите или не зависи изцяло от програмиста или  по друг начин
#include <iostream.h>
#include <conio.h>
int func(int a,int 'B)'
{
return a+b;//
}
main()
{
cout<<"a=";
int a;
cin>>a;
cout<<"b=";
int b;
cin>>b;
cout<<"a+b="<<func(a,b);
getch();
}

но ако дифинирането на func е след главната функция т.е main() тогава е необходимо да декларираш func преди main() или :

#include <iostream.h>
#include <conio.h>
int func(int,int); //prototip na func
main()
{
cout<<"a=";
int a;
cin>>a;
cout<<"b=";
int b;
cin>>b;
cout<<"a+b="<<func(a,b);
getch();
}
int func(int a,int 'B)'
{
return a+b;//
}
Активен

57r1k3

  • Напреднали
  • *****
  • Публикации: 38
    • Профил
Структура на функция
« Отговор #4 -: Oct 16, 2005, 18:29 »
Цитат (the_real_maniac @ Окт. 15 2005,21:43)
Или (1) те се декларират преди функцията , която ги използва -> най-често всички твой функции са преди main(), т.е main() е последната; или (2) функциите се дефинират и могат да се декларират където си поискаш преди или след функцията , която ги ползва.


Как се дефинира функция.

твойта функция:

Примерен код

int sbor(int a, int b);

забележи ; накрая !

функциите се дефинират в началото на кода.
или да го кажа така след хедърните файлове и преди main()
а декларацията, където си поискаш, но щом си дефинирал значи след main().

Имаш малка неточност- декларацията е обявяването за съществуването на функцията:

int foo();

а дефиницията е реализацията на функцията:

int foo()
{
    /***************************
    some code goes here
    ****************************/
}

Успех!
Активен

BSD is, after all, about a commitment to technical excellence, and not about making an operating system platform into a religion.

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Структура на функция
« Отговор #5 -: Oct 27, 2005, 09:46 »
От както написа отговора си 57r1k3 исках да напиша отговор, но нямах време и айде утре , и взех че забравих за темата '<img'>

Та ще се опитам да кажа как виждам аз нещата:

декларирам - обявявам нещо (обявявам , че имам Х)
дефинирам - обяснявам нещото какво е (Х е 10)

хъх , ами да ... '<img'> Значи така , горе съм се объркал.
Все ги бъркам  ':zzz:'

57r1k3 Благодаря за поправката/информацията !
Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)