Форум программистов, компьютерный форум CyberForum.ru

конфликт типов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
09.10.2011, 23:00     конфликт типов #1
пишу себе Си хедер. как реализовать универсальность одной функции для всех типов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.10.2011, 05:59     конфликт типов #21
C
1
void func(void *p, enum type t);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.10.2011, 08:46     конфликт типов #22
Цитата Сообщение от alkagolik Посмотреть сообщение
а есть вообще где глянуть сорцы сишных функций?
Установить glibc-src из портов/пакетов/тарбола/etc...
Код
ls /usr/src/glibc/
далее по обстоятельствам.
Цитата Сообщение от alkagolik Посмотреть сообщение
суть в том чтобы функция имела возможность принимать аргумент любого типа и с ним работать
На всякий случай и printf/scanf посмотрите...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
10.10.2011, 17:32  [ТС]     конфликт типов #23
у меня почему-то (я и раньше обращал внимание) не glibc, а gnulib и сорцы лежат в /usr/share/gulib/lib
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.10.2011, 18:37     конфликт типов #24
Цитата Сообщение от alkagolik Посмотреть сообщение
у меня почему-то (я и раньше обращал внимание) не glibc, а gnulib и сорцы лежат в /usr/share/gulib/lib
Во FreeBSD оно в /usr/src/lib/libc лежит, в CygWin - /usr/src/cygwin-1.5.25-7/newlib/libc... Короче
Код
find /usr/src -name qsort.c
, ну или что_нибудь_ещё.c и будет Вам счастье...
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
10.10.2011, 19:01     конфликт типов #25
в андроиде (бионике) такая реализация
bionic/libc/stdlib/qsort.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
void
qsort(void *aa, size_t n, size_t es, int (*cmp)(const void *, const void *))
{
        char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
        int d, r, swaptype, swap_cnt;
        char *a = aa;
 
loop:   SWAPINIT(a, es);
        swap_cnt = 0;
        if (n < 7) {
                for (pm = (char *)a + es; pm < (char *) a + n * es; pm += es)
                        for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
                             pl -= es)
                                swap(pl, pl - es);
                return;
        }
        pm = (char *)a + (n / 2) * es;
        if (n > 7) {
                pl = (char *)a;
                pn = (char *)a + (n - 1) * es;
                if (n > 40) {
                        d = (n / 8) * es;
                        pl = med3(pl, pl + d, pl + 2 * d, cmp);
                        pm = med3(pm - d, pm, pm + d, cmp);
                        pn = med3(pn - 2 * d, pn - d, pn, cmp);
                }
                pm = med3(pl, pm, pn, cmp);
        }
        swap(a, pm);
        pa = pb = (char *)a + es;
 
        pc = pd = (char *)a + (n - 1) * es;
        for (;;) {
                while (pb <= pc && (r = cmp(pb, a)) <= 0) {
                        if (r == 0) {
                                swap_cnt = 1;
                                swap(pa, pb);
                                pa += es;
                        }
                        pb += es;
                }
                while (pb <= pc && (r = cmp(pc, a)) >= 0) {
                        if (r == 0) {
                                swap_cnt = 1;
                                swap(pc, pd);
                                pd -= es;
                        }
                        pc -= es;
                }
                if (pb > pc)
                        break;
                swap(pb, pc);
                swap_cnt = 1;
                pb += es;
                pc -= es;
        }
        if (swap_cnt == 0) {  /* Switch to insertion sort */
                for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
                        for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
                             pl -= es)
                                swap(pl, pl - es);
                return;
        }
 
        pn = (char *)a + n * es;
        r = min(pa - (char *)a, pb - pa);
        vecswap(a, pb - r, r);
        r = min(pd - pc, pn - pd - (int)es);
        vecswap(pb, pn - r, r);
        if ((r = pb - pa) > (int)es)
                qsort(a, r / es, es, cmp);
        if ((r = pd - pc) > (int)es) {
                /* Iterate rather than recurse to save stack space */
                a = pn - r;
                n = r / es;
                goto loop;
        }
        /* qsort(pn - r, r / es, es, cmp); */
}
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 17:53     конфликт типов #26
alkagolik, Читаю книгу братьев Дейтел. Как раз сегодня наткнулся на то что вам может быть интересным с точки зрения написания вашего хедера и передачи разных типов данных.

A pointer can be assigned to another pointer if both pointers are of the same type. Otherwise, a cast operator must be used to convert the value of the pointer on the right of the assignment to the pointer type on the left of the assignment. The exception to this rule is the pointer to void (i.e., void *), which is a generic pointer capable of representing any pointer type. All pointer types can be assigned to a pointer of type void * without casting. However, a pointer of type void * cannot be assigned directly to a pointer of another typethe pointer of type void * must first be cast to the proper pointer type.
A void * pointer cannot be dereferenced. For example, the compiler "knows" that a pointer to int refers to four bytes of memory on a machine with four-byte integers, but a pointer to void simply contains a memory address for an unknown data typethe precise number of bytes to which the pointer refers and the type of the data are not known by the compiler. The compiler must know the data type to determine the number of bytes to be dereferenced for a particular pointerfor a pointer to void, this number of bytes cannot be determined from the type.
silent_1991
14.10.2011, 22:27
  #27

Не по теме:

Цитата Сообщение от greeezz Посмотреть сообщение
братьев Дейтел
Они отец и сын

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2011, 23:21     конфликт типов
Еще ссылки по теме:

Конфликт имен в библиотеках C++
C++ Конфликт итераторов
C++ Конфликт типов (int, double, bool)

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

Или воспользуйтесь поиском по форуму:
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
14.10.2011, 23:21     конфликт типов #28
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:


Они отец и сын

Не по теме:

Вот так промашка вышла!

Yandex
Объявления
14.10.2011, 23:21     конфликт типов
Ответ Создать тему
Опции темы

Текущее время: 01:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru