Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как в C из структуры вызывать функцию не задавая аргумент структуры? / 13 сообщений из 13, страница 1 из 1
28.12.2012, 18:04
    #38096533
sergei123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
typedef struct person {
	.
	.
	.
}Person;

typedef struct persons {
	int sizeOfArray;
	Person* personsArray;
	void (*add)(Person newPersontoAdd, Persons* personsArray);
}Persons;

void add(Person newPersontoAdd, Persons* personsArray) {
	add new person to persons array...
}

Persons persons;



Теперь как можно вызывать функцию таким образом persons.add(newPerson) а не таким persons.add(newPerson,&persons) ?
...
Рейтинг: 0 / 0
28.12.2012, 19:25
    #38096595
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
Вообще-то процедуры могут иметь методы, не только указатели на функции...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.12.2012, 19:34
    #38096599
sergei123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
Это в C++ могут, а в C ругается на синтакс.
...
Рейтинг: 0 / 0
28.12.2012, 19:52
    #38096614
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
sergei123Это в C++ могут, а в C ругается на синтакс.
Это правильный ответ.
...
Рейтинг: 0 / 0
28.12.2012, 20:32
    #38096641
sergei123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
Anatoly Moskovsky,

Понятно, а по-другому никак?
...
Рейтинг: 0 / 0
28.12.2012, 20:37
    #38096647
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
sergei123,

Язык С (в 99%) делает только то, что ему указал программист.
Если аргумент не передали, то компилятор его туда никак не подставит.
...
Рейтинг: 0 / 0
08.01.2013, 22:00
    #38102583
vromanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
sergei123,

Использовать статический массив и напрямую обращаться к нему.
...
Рейтинг: 0 / 0
09.01.2013, 03:13
    #38102781
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
Теперь как можно вызывать функцию таким образом persons.add(newPerson) а не таким persons.add(newPerson,&persons) ?

никак, ты обязан при вызове передавать все параметры.
...
Рейтинг: 0 / 0
09.01.2013, 09:46
    #38102881
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
Да, если ты тут пытаешься имитировать ооп на C, то ты делаеш это неправильно.
...
Рейтинг: 0 / 0
09.01.2013, 14:22
    #38103409
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
А разбить одну на две функции - разве не оно? Если функционал юзается однпоточно, то вроде вполне можно. Сначала делаете вашему инстансу setPersonaArrayToWork(Persons* value){personsArray=value;}, и потом вызываете persons.add(newPerson).
А второй параметр, например, вообще можно сделать по умолчанию. Если там null, то использует предустановленный ранее через setPersonaArrayToWork, а если там не-null, то используется он.
...
Рейтинг: 0 / 0
09.01.2013, 14:41
    #38103475
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
chabapokА разбить одну на две функции - разве не оно? Если функционал юзается однпоточно, то вроде вполне можно. Сначала делаете вашему инстансу setPersonaArrayToWork(Persons* value){personsArray=value;}, и потом вызываете persons.add(newPerson).
А второй параметр, например, вообще можно сделать по умолчанию. Если там null, то использует предустановленный ранее через setPersonaArrayToWork, а если там не-null, то используется он.
Лучше сразу застрелиться. Все равно потом коллеги забьют ногами.
...
Рейтинг: 0 / 0
09.01.2013, 18:47
    #38103958
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
А почему коллеги забьют ногами? может это код преферанса, тогда гусары забьют канделябрами

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

...но даже если топикстартеру удастся это сделать, то он тут же захочет что нибудь из серии "jmx на плюсах", как в соседней ветке. А все от распространенного заблуждения, что телега под названием С может быть мерседесом.


не надо никаких void (*add)(...)
и тогда вместо persons.add(newPerson,&persons), пускай он пишет просто add(newPerson,&persons), и дважды написанное persons не будет ему мозолить глаза. А если ему не нравится такое add, то пускай он помещает его в неймспейс.
Ну я б ссылку на структуру поместил бы вначале add(&persons, newPerson) - мне кажется так было бы "ближе" к плюсам.
...
Рейтинг: 0 / 0
09.01.2013, 19:58
    #38104038
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в C из структуры вызывать функцию не задавая аргумент структуры?
chabapok,

Ну, все правильно написали.

Указатели на функции в объекте нужны только если требуется полиморфное поведение.
Но поведение прямой связи с синтаксисом не имеет.
А тут видно что ТС хотел именно синтаксиса похожего на С++ - вот этому не бывать :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как в C из структуры вызывать функцию не задавая аргумент структуры? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]