Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/40: Рейтинг темы: голосов - 40, средняя оценка - 4.75
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80

Как создать файл со своими функциями

08.07.2010, 18:21. Показов 7596. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу на С, вопрос такой.
Часто приходится писать одни и те же функции по 10 раз, потому что они повторяются из задачи в задачу (ввод-вывод массива, его сортировка и т.д.). Копировать лень, они довольно небольшие, пишу руками.
Но надоело уже.

Решил создать свой файл, в котором были бы собраны написанные мною функции, чтобы подключить его и не париться.

Однако вопрос в том - как его создать.

Создать .с-файл по типу:
C
1
2
3
4
5
6
7
8
#include <stdio.h>
 
void abc( void );
 
void abc( void )
{
     printf("Hi");
}
не получается. Компилятор ругается на отсутствие main. С другой стороны - нафига мне main, мне бы просто сборник функций сделать.

Конечно, "на безрыбье" и с main сойдёт. Но я же знаю, что там можно как-то по-хитрому через ".h"-файлы сделать
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2010, 18:21
Ответы с готовыми решениями:

Как правильно организовать заголовочный файл со своими функциями?
Есть файл в котором я храню функции, которые часто использую(среди них есть и шаблонные). Например: //Utils.h template...

Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема:...

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

25
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 18:30
не знаю как на С, но на С++ это можно зделать так - прописать
C++
1
2
3
4
5
6
#ifndef ИМЬЕФАИЛА_H_
#define ИМЬЕФАИЛА_H_
... //функции
... //функции
... //функции
#endif
и сохрани сей код в формате .h
а потом пиши где хочешь - #include "имьефаила.h".
не ручаюсь что сработает.
так на С++.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.07.2010, 18:30
Создать .h файл.
Прописать в нем функции. Включить его в главную программу директивой #include "имя файла.h"
Не успел) Вот как тебе написал предыдущий автор так и делай.
0
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
08.07.2010, 18:45  [ТС]
Нда, а "на безрыбьи" то не вышло бы - пишет ошибка, 2 main :-D

вот создал "my-funcs.h" файл:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef MY-FUNCS_H_
#define MY-FUNCS_H_
 
#include <stdlib.h>
#include <time.h>
 
void printIt( int array[], int size );
void randomizeIt( int array[], int size, int maxValue );
 
void printIt( int array[], int size )
{
     ...
}
 
void randomizeIt( int array[], int size, int maxValue )
{
     ...
}
 
#endif
логи компилятора после попытки подключения этого .h-файла:
D:\Programming\C\/my-funcs.h:1:11: warning: extra tokens at end of #ifndef directive
D:\Programming\C\/my-funcs.h:2:11: warning: ISO C requires whitespace after the macro name
=\
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.07.2010, 19:02
ммм... создай файл через нижнее подчеркивание.
Да. Нижнее подчеркивание. И подключай в с файле через #include "my_funks.h"
Хотя файл наверное можно не пересоздавать. Просто вот здесь:

#ifndef MY-FUNCS_H_
#define MY-FUNCS_H_

Пиши

#ifndef MY_FUNCS_H_
#define MY_FUNCS_H_
2
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
08.07.2010, 19:11  [ТС]
Lavroff и nikkka, спасибо!

Только вопрос - а как бы на ошибки проверить созданный .h-файл? По нему ведь компилятор во время написания не проходится ^_^
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 19:14
cсоздаёшь фаил .cpp, пишеш там ТОЛЬКО (хотя можно и не только, но лично я поступаю так) #include "имьефаила.h" и компилиш. он тебе выдаст все ошибки в фаиле ИМЬЕФАИЛА.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.07.2010, 19:14
TrenAr, Писать в с/cpp файл и проверять. Затем скидывать в .h. Ну или как сказал nikka) Кстати... Судя по всему и по .h он проходится если ты его подключешь. Ибо вот тут он xDDD не воспринимает) Ошибку пишет)
//main.cpp
C
1
2
3
4
5
6
7
8
9
10
11
#include "my-funks.h"
int main()
{
    int array[100];
    int size=5;
    for(int i=0;i<size;i++)
        scanf("%d", &array[i]);
    int MaxValue;
    printIt(array, size);
    return 0;
}
//my_funks.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef MY_FUNCS_H_
#define MY_FUNCS_H_
#include <stdio.h>
#include <time.h>
 
void printIt( int array[], int size );
void randomizeIt( int array[], int size, int maxValue );
 
void printIt( int array[], int size )
{
    xDDD
    for(int i=0;i<size;i++)
        printf("%d\n", array[i]);
}
 
void randomizeIt( int array[], int size, int maxValue )
{
}
 
#endif
0
 Аватар для usernet009
26 / 26 / 5
Регистрация: 28.12.2009
Сообщений: 85
08.07.2010, 19:59
А вот еще вопрос по теме. Как разбить свой класс на файлы и заставить его НОРМАЛЬНО подключаться к программе ?
Вот... я создаю класс. В ХЭДЭРЕ просто объявляю этот класс
someclass.h
C++
1
2
3
4
5
6
7
8
9
class someclass
{
public:
     someclass();
     ~someclass();
     void somefunc();
private
     int somevar;
}
Дальше создаю CPP файл с описанием класса
someclass.cpp
C++
1
2
3
4
5
6
7
#include"someclass.h"
someclass::someclass()
:somevar(0){}
someclass::~someclass()
{}
void someclass::somefunc()
{ cout<<"Hello"; }
Теперь ( как мне пишут в методичке от универа ) я должен в главном файле ( файле программы ) подключить Хэдер.
main.cpp
C++
1
2
3
4
5
#include"someclass.h"
int main()
{
    someclass t1;
}
И все должно работать. Но в borland 3.11 ничего не работает. Потом я "наблатыкался" и нашел как делать в MVS. Нужно выбрать пункт "добавить класс" потом указать .h и .cpp файлы и этот класс как бы подключается к моей программе, но сам механизм мне не понятен... почему оно работает ? Как оно работает ? Где этот объектный код ( о котором я читал в википедии и про который мне говорил преподователь ) ? Как он используется ? И в ХЭДЭРЕ ж ведь не подключается .cpp файл так почему я в программе подключаю только ХЭДЭР, и оно работает ?

В общем, много вопросов, ответить наверное будет сложно, поэтому лучше дайте ссылку, где про все это можно почитать
p.s это касается не только классов, и простые "библиотеки функций" также делаются. Ну тоесть, мы подключаем .h в котором содержится только объявления функций и ... можем их использовать в главной программе, хотя в .h нет никакой ссылки на .cpp
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
08.07.2010, 20:03
Цитата Сообщение от usernet009 Посмотреть сообщение
borland 3.11 ничего не работает
неудивительно
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.07.2010, 20:03
#include"someclass.сpp"

Попробуйте так. + добавьте в .h файл

#ifndef SOMECLASS_H_
#define SOMECLASS_H_
И в конце файла
#endif
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 20:08
Цитата Сообщение от usernet009 Посмотреть сообщение
все должно работать
попробуйте прописать не только .h, но и фаил реализации...
хотя может и не помочь...

Добавлено через 2 минуты
Цитата Сообщение от PointsEqual Посмотреть сообщение
неудивительно
почему??

Добавлено через 1 минуту
Цитата Сообщение от Lavroff Посмотреть сообщение
#ifndef SOMECLASS_H_
#define SOMECLASS_H_
И в конце файла
#endif
usernet009, всё как сказал Lavroff. в фаиле .h
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
08.07.2010, 20:09
потомучто старый компилятор уже
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 20:15
PointsEqual, ааа... понятно....
но может из за ошибок указанных мною и Lavroff-ом?...

Добавлено через 4 минуты
TrenAr, вот тебе шаблон:
так выглядит фаил someclass.h
C++
1
2
3
4
#ifndef SOMECLASS_H_
#define SOMECLASS_H_
...//функции, классы, переменные и т.д.
#endif
так выглядит реализация функций, классов, и т.д. (someclass.cpp)
C++
1
2
#include "someclass.h"
...//реализация
а так клиентская программа:
C++
1
2
3
4
5
6
#include "someclass.h"
#include "someclass.cpp"
int main
{
   ...
}
P.S. по моему так... XD
0
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
08.07.2010, 20:23  [ТС]
Цитата Сообщение от Lavroff Посмотреть сообщение
Ибо вот тут он xDDD не воспринимает) Ошибку пишет)
Цитата Сообщение от nikkka Посмотреть сообщение
cсоздаёшь фаил .cpp, пишеш там ТОЛЬКО (хотя можно и не только, но лично я поступаю так) #include "имьефаила.h" и компилиш. он тебе выдаст все ошибки в фаиле ИМЬЕФАИЛА.
Не, это понятно, что при компиляции нашего файла он по .h тоже пройдётся. Но я думал есть более "правильные" способы, когда .h можно проверить на ошибки без необходимости его куда-либо подключать
0
34 / 34 / 8
Регистрация: 07.06.2010
Сообщений: 118
08.07.2010, 21:34
А я где то в книгах натыкался что в MS Visual C++ можно каким то образом компилировать загаловочные файлы без main...
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
08.07.2010, 21:37
А я где то в книгах натыкался что в MS Visual C++ можно каким то образом компилировать загаловочные файлы без main...
не могу сказать - пишу Dev-C++
0
21 / 20 / 3
Регистрация: 21.06.2010
Сообщений: 80
09.07.2010, 18:01  [ТС]
Цитата Сообщение от nikkka Посмотреть сообщение
не могу сказать - пишу Dev-C++
Вот и я там же
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
09.07.2010, 18:04
TrenAr, вот, попробуй откомпилить фаил ТОЛЬКО со следуйщим текстом:
C++
1
2
3
4
int plus(int k)
{
return k++;
}
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
09.07.2010, 18:13
1.
Цитата Сообщение от Lavroff Посмотреть сообщение
#include"someclass.сpp"
НИКОГДА так не делай. Подключаться должны заголовочные файлы, а не файлы реализации.
2. Заголовочные файлы должно содержать только объявление функций или встроенные функции, определения - в *.cpp.
3. Если уж приспичило все кидать в один файл, то данный файл должен иметь расширение .hpp, должен быть защищен стражами включения и тогда его можно подключать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2010, 18:13
Помогаю со студенческими работами здесь

Как создать файл со своими командами для программы
Как создать файл со своими командами для программы: например пишу в файл txt msg(&quot;Hello&quot;); msg(&quot;Hello&quot;); ...

Как добавить в свою программу библиотеку со своими функциями?
написал библиотеку, но не знаю как подключить ее к программе

Создать файл функциями winapi
Нужно создать файл с помощью функций winapi . И сделать запись в стрингрид и считывание из стрингрида с помощью функций winapi. Помогите...

Написать программу с двумя своими функциями.
Написать программу с двумя своими функциями. Одна выводит сообщение, другая устанавливает шестнадцатеричный вывод.

программа с двумя своими функциями. Одна выводит сообщение, другая устанавливает шестнадцатеричный вывод.
Нужна программа с двумя своими функциями. Одна выводит сообщение, другая устанавливает шестнадцатеричный вывод.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru