Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: "Многофайловые Программы"  (Прочитано 12296 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец

ru
Offline Offline
id/fm105


« : 10-10-2011 14:14 » 

Хочу вытащить " DWORD  WINAPI  SocketHandler(void*); " в отдельный файл tools, сейчас где и main()

Цитата: winsockexampl.cpp
#include "stdafx.h"
#include "Tools.h"

DWORD  WINAPI  SocketHandler(void*);
/* SERVER */
int main(int argv,char **argc){.....CreateThread(0,0,&SocketHandler, (void*)csock , 0,0);......}

DWORD WINAPI SocketHandler(void* lp){.....}


Цитата: tools.h
#pragma once
char* myread_bin(char buff_way[255], int &buf_len); (функцию получилось вынести)
Цитата: Tools.cpp
#include "Tools.h"
#include "stdafx.h"
 
char* myread_bin(char buff_way[255], int &buf_len){.............}   

Цитата: stdafx.h
#pragma once
using namespace std;
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <fstream>
#include <iostream>
#include <winsock2.h>
#include <windows.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
только прошу, без умных слов, сделай... классами , статик.. как вот Скромно так...
« Последнее редактирование: 10-10-2011 14:31 от LightSin » Записан

Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
DneprSMV
Помогающий

kz
Offline Offline
Пол: Мужской

« Ответ #1 : 10-10-2011 14:39 » 

extern попробуй.
А какой компилятор, чем ругается ?
Записан

"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
dark_rain
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 10-10-2011 15:31 » 

Цитата
только прошу, без умных слов, сделай... классами , статик.. как вот

Лично я бы делал именно так.  А потом через объект класса к нему бы и постучался. Так будет правильно я думаю.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 10-10-2011 15:53 » 

LightSin, я ж тебе написал ))


как-то так


main.cpp

Код:
#include "stdafx.h"
#include "Tools.h"
#include "helper.h"

/* SERVER */

int main(int argv,char **argc)
{
helper::SocketHandler(0);
}



helper.h

Код:
#pragma once
class helper
{
public:
static DWORD WINAPI  SocketHandler(void*)
{
//...
}
};


helper.cpp
Код:
#include "stdafx.h"
#include "helper.h"
DWORD WINAPI  helper::SocketHandler(void*)
{
//...
}


Можно и с extern, но не нужно. Уже изобрели классы

Добавлено через 1 минуту и 17 секунд:
название класса у меня helper, назови по смыслу его
« Последнее редактирование: 10-10-2011 15:54 от Алексей1153 » Записан

LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец

ru
Offline Offline
id/fm105


« Ответ #4 : 10-10-2011 16:46 » 

ок, спасибо.. работает.
Записан

Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 10-10-2011 20:32 » 

Или я чего-то не понимаю, или вы что-то усложняете. Надо было что, функцию в отдельный модуль вынести? Ну так, определение функции (тело, то есть) пишется в Tools.cpp, объявление функции дублируется в Tools.h, и далее Tools.h инклудится по мере надобности. Остальное - дело линковщика. М?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 10-10-2011 20:45 » 

Вад, можно и так, приписав в заголовке extern
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 11-10-2011 07:51 » 

Зачем здесь extern? Мы же о функции говорим?
Записан
DneprSMV
Помогающий

kz
Offline Offline
Пол: Мужской

« Ответ #8 : 11-10-2011 13:34 » 

Вад,
Может ошибаюсь, но зависит от того, в каком проекте собирается.
Если компилятром-линкером по MAKE - надо указывать extern.
(те функция внешняя по отношению к данному модулю, и не входит в состав стандартных и указаных для линковки библиотек).
Если в построителе проекта (wizard) - то он глобальные ф-ии видит, кажется на основании входящих в проект модулей ........
IMHO.
ps - ps ..... Долго думал .... проверил  Улыбаюсь
.... и хитрого файла #include "stdafx.h".

« Последнее редактирование: 11-10-2011 18:00 от DneprSMV » Записан

"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 11-10-2011 19:57 » 

Сколько писал проектов, собирая gcc/g++ при помощи make, всё как-то обходился без extern. И без precompiled headers. Как на чистом С, так и на плюсах. То есть, оно (extern), конечно, бывает надо, но, мне показалось, не в тривиальном случае вроде описанного.

Поскольку на этапе компиляции модуля в объектный файл должно хватать информации о сигнатуре (читай, объявления функции), а разрешать зависимости - это дело линковщика, и если ему на вход подают весь список нужных объектов, то разобраться, какая нужная функция почему-либо встретилась 2 раза, а какая - ни разу, -- с этим проблем быть не должно.
Записан
DneprSMV
Помогающий

kz
Offline Offline
Пол: Мужской

« Ответ #10 : 12-10-2011 07:21 » 

Вад
согласен. Давно(очень) использовал extern для увязки модулей C/main и ASM/func().
(С - extern, ASM - public). Но комиплятор-ликер были "еще те"  Улыбаюсь  Borland (Turbo) C++ 1.0   Улыбаюсь
Для меня тоже не ясно, надо будет "вернуться к истокам" и подчитать док. по extern - как используется и используется ли вообще на современном софте.
(возможно, в директиве есть возможность указать ньюансы вызова, например порядок параметров. это "гипотенуза").
Записан

"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines