Помощь - Поиск - Пользователи - Календарь
Полная версия: Описание модулей
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Zas
Объясните пожалуйста как нужно использовать модули в Си?
Я создаю файл к примеру List.h в нем пишуб к примеру:
#ifndef List_h
#define List_h
typedef
struct _elem {

int info;
struct _elem *next;

} elem, *pt;

extern int getelem(char *elname);
extern void addtobegin(pt *list, int info);
extern void addafter(pt listel, int info);
extern void addtoend(pt *list, int info);
extern void addbefore(pt listel, int info);
extern void delfirstel(pt *list);
extern void dellastel(pt *list);
extern void delel(pt *list, pt el);
extern void delbefore(pt *list, int info);
extern void delafter(pt *list, int info);
extern void printlist(pt list);
extern void checkel(pt list, int info);
extern void listclear(pt *list);
extern void showmenu();

#endif

Потом создаю файл List.c, где описываю все функции:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "List.h"
typedef
struct _elem {

int info;
struct _elem *next;

} elem, *pt;
...


И в основном файле программы пишу:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "List.h"
int main() {...
При компиляции в Dev c++ пишет, что неопределенное обращение к функциям....
volvo
Почему прототипы описаны как extern? Попробуй убрать это слово... Это первое. Второе - зачем ты ту же самую структуру определяешь и в *.H файле, и в *.C файле? Из *.С файла убери ее определение...
Zas
Спасибо, но выдает те же самые ошибки: Linker error undefined reference to название процедуры
volvo
А ты подключил свой C-файл к проекту?

То, что ты сделал include файла *.H, это прекрасно, и это помогает компилятору откомпилировать основную программу (так как компилятору достаточно знать прототип функции, а не ее определение).

А вот линкер поднимает тревогу, потому как он должен получить уже все модули откомпилированными в OBJ-файлы, чтобы из них собрать EXE... А у тебя как видно есть только ОBJ основного файла, а LIST.OBJ не создался?
Zas
при компиляции создаются файлы *.o *.obj нету.
volvo
Цитата
при компиляции создаются файлы *.o
Да какая разница, что создается при компиляции? У тебя может и *.o, у других obj ... Что за привычка, основное не заметить, и начать придираться к малому? Я вопрос задал: ты C-файл к проекту подключил?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.