Prepinanie medzi .c subormi

Programovacie jazyky, rady, poradňa...
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Prepinanie medzi .c subormi

Príspevok od používateľa maetoo »

Mám 2 zdrojove subory.
Kod zdrojoveho suboru main.c

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>

main() {

    int password;
    int passwordOk;
    passwordOk=123456;

for(;;) {
    printf("Zadajte heslo:\t");
    scanf("%i", &password);

    if(password==passwordOk) {
        printf("Heslo bolo uspesne zadane\n");
                              }

    else printf("Nezadali ste spravne heslo.\n"
                "Zadanie opakujte.\n"
                "\n"
               );
        };

    return;
}
Kod zdrojoveho suboru menu1.c

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>

menu1() {

    printf("Vitajte v menu c.1");

    return;
}
Ako dosiahnuť to resp. ako zapisať do syntaxe to, že keď uživatel zada správne heslo,
mu nezobrazilo: !Heslo bolo uspesne zadane!, ale aby ho presmerovalo na subor menu1.c a zobrazilo mu to,
čo je napisane v subore menu1.c.
94jakub
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2037
Registrovaný: 15 dec 2006, 13:18
Bydlisko: Martin/BA
Kontaktovať používateľa:

Re: Prepinanie medzi .c subormi

Príspevok od používateľa 94jakub »

na vrch pridáš
#include "menu1.c"

a miesto toho printf zavoláš funkciu menu1()
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Prepinanie medzi .c subormi

Príspevok od používateľa maetoo »

94jakub napísal: na vrch pridáš
#include "menu1.c"
a miesto toho printf zavoláš funkciu menu1()
Neprogramujem dlho, ale pokiaľ viem do include sa zapisuju iba subory .h, ale nie subory .c.
Skusil som to aj napriek tomu, že viem, že sa tam pišu iba hlavičkove subory.

Subor menu1.c som trochu upravil

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>

GLOBAL void test1(void) {

    printf("Vitajte v menu test1");

}
Subor main.c som tiež čiastočne upravil

Kód: Vybrať všetko

for(;;) {
    printf("Zadajte heslo:\t");
    scanf("%i", &password);

    if(password==passwordOk) {
        test1();
                             }

    else printf("Nezadali ste spravne heslo.\n"
                "Zadanie opakujte.\n"
                "\n"
               );
        };

Kód: Vybrať všetko

Keď spustim program, kompilator napiše chýbu:
E:\Dokumenty-all\Programovanie C\Ziadanie hesla\menu1.c|4|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'|
Čo to znamena? Kde v syntaxe mám chybu?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Prepinanie medzi .c subormi

Príspevok od používateľa harrison314 »

Takze robi sa to takto:

Mas subor main.c, v ktorom je main.

Pre ostatne skupiny funcii mas hlavickovy subor s deklaciami a C-eckove subory s implementaciou.

test1.h

Kód: Vybrať všetko

#ifndef TEST1_HEADER_FILE
#define TEST1_HEADER_FILE

void test1();

#endif
test1.c

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>

void test1() 
{
    printf("Vitajte v menu test1");
}
main.c

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>
#include "test1.h"  // !!! pozor

int main()
{
   test1();
   // atd
}
a kompilujes (ak pouzivas nejake IDE tak ti spravi samo)

Kód: Vybrať všetko

gcc test1.c main.c -o mojprogram.exe
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Prepinanie medzi .c subormi

Príspevok od používateľa maetoo »

Oukey, vďaka za vysvetlenie.
Ak by som mal viac voidov, ku každemu void suboru musim spraviť zvlašť hlavickovy subor napr.

test1.h

Kód: Vybrať všetko

#ifndef TEST1_HEADER_FILE
#define TEST1_HEADER_FILE

void test1();

#endif
test2.h

Kód: Vybrať všetko

#ifndef TEST2_HEADER_FILE
#define TEST2_HEADER_FILE

void test2();

#endif
a tak ďalej, alebo to môžem spraviť tak, že napr. spravim jeden hlavičkovy subor,
nazvem ho napr.void.h a do neho napišem viac voidov?

void.h

Kód: Vybrať všetko

#ifndef VOID_HEADER_FILE
#define VOID_HEADER_FILE

void test1();
void test2();
void test3();
void test4();
void test-n();

#endif
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Prepinanie medzi .c subormi

Príspevok od používateľa harrison314 »

ale voidy?
void je datovy typ, ktory hovori, ze tam ziadny datovy typ nie je :D

to su funkcie :D

Ano mozes mat v hlavickovom subore viac funkcii
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Prepinanie medzi .c subormi

Príspevok od používateľa BX »

maetoo: v prekladačoch C-čka existuje tzv. preprocessor, ktorý, okrem iného, spracováva direktivy #nieco (s mriežkou na začiatku). Ako názov preprocesor napovedá, je to nejaký "pred proces", takže sa zavolá ešte pre samotným prekladom kódu. No a konkrétne pre #include urobí jednoducho to, že vezme definovaný súbor a jeho obsah plácne tam, kde je #include. V konečmom dôsledku tak vznikne jeden obrovský súbor, plný kódu (včetne kódu knižníc, ktoré tam máš) a ten sa preloží a spustí.
Takže žiadne členenie na súbory neexistuje. Všetko je to v konečnom dôsledku len jeden veľký súbor s kódom. Členenie na súbory má zmysel len pre programátora, aby to bolo trochu prehľadnejšie.

Takže miesto toho súboru to môžeš kľudne písať priamo nad main, je to úplne to isté. Ak si ale časť kódu chceš vizuálne "oddeliť" od iného, robí sa to tak, ako napísal harrison.

(pre jednoduchosť ignorujem činnosť linkera)
Napísať odpoveď