реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> QSORT
Евгений Германов...
сообщение Oct 23 2007, 13:16
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



//#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"



#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };

int compar( const void *arg1, const void *arg2 )
{
return( *(int *)arg1 - *(int *)arg2 );
}

void main()
{
qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 128 "C:\PROGRA~1\PICC\drivers\stdlib.h" Line 23(1,2): A #DEVICE required before this line
1 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 23 19:15:34 2007

Ну и ???
Кстати эта строка вставляется автоматически при создании проекта.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 13:24
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Евгений Германович @ Oct 23 2007, 17:16) *
Ну и ???
Кстати эта строка вставляется автоматически при создании проекта.


А, понятно, это какие-то особенности конкретного компилятора. Не умеет компилировать stdlib.h без указания устройства, под которое ведется компиляция. Чтобы не портить исходник всякими левыми автоматически сгенерированными хедерами - соответссующее определение наверняка можно вставить в опциях проекта.

Вы, вероятно, в первый раз пытаетесь писать на С? Скопируйте для начала какой-нибудь пример, который обычно идет с компилятором, в отдельный каталог. Потом добейтесь его компиляции. Когда будет компилироваться - можно будет дойти до qsort. Так как я с этим компилятором, вероятно, не работал - более подробно объяснить не смогу, как это сделать.

То, что такая строка генерируется автоматически при создани проекта, скорее всего, говорит о качестве компилятора. Птому что бэкслеш - это префикс escape последовательности. И так писать include нехорошо, даже если конкретный компилятор и проглатывает.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2007, 13:26
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Oldring @ Oct 23 2007, 15:51) *
Кстати, правильно писать #include "C:\\Program Files\\PICC\\CHUDO\\asdf\\asd1.h"

С двойными слешами перебор, ибо это не сишнная стринг а директива препроцессора, но можно. Вообще-то возможно и #include "C:\\\\Program Files\\\\\\PICC\\CHUDO\\asdf\\asd1.h"
И так:
#include "C:/Program Files\PICC\CHUDO/asdf\asd1.h"
Препроцессоры на практике разбираются со всем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 13:36
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(zltigo @ Oct 23 2007, 17:26) *
С двойными слешами перебор, ибо это не сишнная стринг а директива препроцессора, но можно.


Не совсем - по стандарту препроцессор работает на потоке лексем, и escape заменяется во время лексического разбора. Поэтому там именно строка. Кстати, старые С компиляторы не кушали с одинарными бэкслешами. Это потом появились слишком умные в рассчете на типичные ошибки неопытных программистов.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
soshnev
сообщение Oct 23 2007, 13:49
Сообщение #20


Частый гость
**

Группа: Новичок
Сообщений: 119
Регистрация: 26-08-05
Пользователь №: 7 989



Цитата(Евгений Германович @ Oct 23 2007, 17:16) *
//#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };

int compar( const void *arg1, const void *arg2 )
{
return( *(int *)arg1 - *(int *)arg2 );
}

void main()
{
qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 128 "C:\PROGRA~1\PICC\drivers\stdlib.h" Line 23(1,2): A #DEVICE required before this line
1 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 23 19:15:34 2007

Ну и ???
Кстати эта строка вставляется автоматически при создании проекта.

Эта строка собирается исходя из опций для компиляции модели (напр. в
Borland-C была large, small модели и т п "лабуда".
Посмотрите опции компиляции модели или компилятора...
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 13:56
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(Oldring @ Oct 23 2007, 16:24) *
А, понятно, это какие-то особенности конкретного компилятора. Не умеет компилировать stdlib.h без указания устройства, под которое ведется компиляция. Чтобы не портить исходник всякими левыми автоматически сгенерированными хедерами - соответссующее определение наверняка можно вставить в опциях проекта.

Вы, вероятно, в первый раз пытаетесь писать на С? Скопируйте для начала какой-нибудь пример, который обычно идет с компилятором, в отдельный каталог. Потом добейтесь его компиляции. Когда будет компилироваться - можно будет дойти до qsort. Так как я с этим компилятором, вероятно, не работал - более подробно объяснить не смогу, как это сделать.

То, что такая строка генерируется автоматически при создани проекта, скорее всего, говорит о качестве компилятора. Птому что бэкслеш - это префикс escape последовательности. И так писать include нехорошо, даже если конкретный компилятор и проглатывает.

С самим проектом все нормально не уводите процесс.На Си не впервые,но не профи.Компилятор полное дерьмо,я не смог на нем создать многофайловый прект.
Однако вернемся к теме.
Текст я не набиваю,а копирую ваш.
О какой лишней строке вы говорите?
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h" если про эту то с ней все нормально -многократно проверено.Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова.До кучи я трудился на 2 аппаратах на другом эта строка выглядит по другому но ошибки теже самые.

Сообщение отредактировал Евгений Германович - Oct 23 2007, 14:01
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2007, 14:07
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Евгений Германович @ Oct 23 2007, 16:56) *
Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова.

Не обижайтесь, но я не буду заниматься ерундой компилируя совершенно очевидные вещи.
Если угодно, то можете считать, что я откомпилировал и ошибок не получил smile.gif




Цитата(Oldring @ Oct 23 2007, 16:36) *
Поэтому там именно строка. Кстати, старые С компиляторы не кушали с одинарными бэкслешами. Это потом появились слишком умные в рассчете на типичные ошибки неопытных программистов.

Дело обстоит с точностью до наоборот - возьмите, например BCC 1992 года (можете и более поздние 3.1 ) и попробуйте ему скормить любой двойной слэш.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 14:11
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(zltigo @ Oct 23 2007, 17:02) *
Не обижайтесь, но я не буду заниматься ерундой компилируя совершенно очевидные вещи.
Если угодно, то можете считать, что я откомпилировал и ошибок не получил smile.gif

Я не обижаюсь Важен результат,а его нет.Могу я считать или нет.Вы похоже весьма опасаетесь получить отрицательный результат.Не бойтесь.Как говорил Ф Энгельс или К Маркс не ошибается тот кто ничего не делает.Кстати на Турбо Си подобный текст тоже не проходит.
Кстати вы говорите о больших Си а это Си для микроконтроллеров.

Сообщение отредактировал Евгений Германович - Oct 23 2007, 14:13
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 14:15
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Евгений Германович @ Oct 23 2007, 17:56) *
С самим проектом все нормально не уводите процесс.На Си не впервые,но не профи.Компилятор полное дерьмо,я не смог на нем создать многофайловый прект.
Однако вернемся к теме.
Текст я не набиваю,а копирую ваш.
О какой лишней строке вы говорите?
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h" если про эту то с ней все нормально -многократно проверено.Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова.До кучи я трудился на 2 аппаратах на другом эта строка выглядит по другому но ошибки теже самые.


Вы бы для начала поучились лучше вежливости, прежде чем пальцы растапыривать. Ваша квалификация в программировании очевидно находится на уровне начинающего. Иначе бы вы не задавали подобные вопросы и не сделали бы столько грамматических ошибок в написании одной функции.
Моего текста вы компилировать не можете потому что я ничего не писал. Текст других авторов выглядит нормально.
Ставить себе ваш компилятор и компилировать самому никакого интереса для себя не вижу. Более того, не помню, чтобы был вам что-то должен.
По делу. У вашего компилятора какие-то глюки. Попробуйте скомпилировать один файл без инклудов и вызова функции qsort. То есть одно определение функции compar. Возможно ваш компилятор не понимает ANSI C и нужно выкинуть ключевые слова const.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 14:24
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(Oldring @ Oct 23 2007, 17:15) *
Вы бы для начала поучились лучше вежливости, прежде чем пальцы растапыривать. Ваша квалификация в программировании очевидно находится на уровне начинающего. Иначе бы вы не задавали подобные вопросы и не сделали бы столько грамматических ошибок в написании одной функции.
Моего текста вы компилировать не можете потому что я ничего не писал. Текст других авторов выглядит нормально.
Ставить себе ваш компилятор и компилировать самому никакого интереса для себя не вижу. Более того, не помню, чтобы был вам что-то должен.
По делу. У вашего компилятора какие-то глюки. Попробуйте скомпилировать один файл без инклудов и вызова функции qsort. То есть одно определение функции compar. Возможно ваш компилятор не понимает ANSI C и нужно выкинуть ключевые слова const.
Вы весьма невнимательны .текст не мой я уже писал об этом.Без инклудов не получится.
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };
int compar( const void *arg1, const void *arg2 )
{ return( *(int *)arg1 - *(int *)arg2 );
}
void main()
{ // qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
17 ошибок.И предложение откомпилировать текст было адресовано не вам,вы напрасно возмущаетесь.
Про пальцы больше относится не ко мне.На конкретно поставленный вопрос одни рассуждения.Текст взят без изменений с самого компилятора.

Сообщение отредактировал Евгений Германович - Oct 23 2007, 14:28
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 14:25
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Евгений Германович @ Oct 23 2007, 18:24) *
Вы весьма невнимательны .текст не мой я уже писал об этом.Без инклудов не получится.


У вас ругалось на stdlib.h после комментарии первого инклуда. Закомментируйте и его тоже.

P.S. По поводу гнутья пальцев: столько, сколько я за свою жизнь написал и заставил работать сишного кода вы, очевидно, уже никогда не напишете. Да и я уже тоже наверняка еще столько же не напишу. Так что если вам пытаются помочь - умейте быть благодарны. Это у вас проблемы, а не у нас.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 14:45
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(Oldring @ Oct 23 2007, 17:25) *
У вас ругалось на stdlib.h после комментарии первого инклуда. Закомментируйте и его тоже.

P.S. По поводу гнутья пальцев: столько, сколько я за свою жизнь написал и заставил работать сишного кода вы, очевидно, уже никогда не напишете. Да и я уже тоже наверняка еще столько же не напишу. Так что если вам пытаются помочь - умейте быть благодарны.

#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

//#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };
int compar( const void *arg1, const void *arg2 )
{ return( *(int *)arg1 - *(int *)arg2 );
}
void main()
{ // qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
17 ошибок.Попробую отыскать прототип этой функции.Не надо так мрачно пишите хоть в 10 раз больше.


void main()
{ // qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
typedef signed int (*_Cmpfun)(char * p1,char * p2);

void qsort(char * qdata, int qitems, int qsize, _Cmpfun cmp) {
int m,j,i,l;
short done;
BYTE t[16];

m = qitems/2;
while( m > 0 ) {
for(j=0; j<(qitems-m); ++j) {
i = j;
do
{
done=TRUE;
l = i+m;
if( (*cmp)(qdata+i*qsize, qdata+l*qsize) > 0 ) {
memcpy(t, qdata+i*qsize, qsize);
memcpy(qdata+i*qsize, qdata+l*qsize, qsize);
memcpy(qdata+l*qsize, t, qsize);
if(m <= i)
i -= m;
done = FALSE;
}
} while(!done);
}
m = m/2;
}
}
Вот прототип.ВЫ считаете те слова,что были написаны это помощ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2007, 14:45
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Евгений Германович @ Oct 23 2007, 17:11) *
Вы похоже весьма опасаетесь получить отрицательный результат.Не бойтесь.

Отнюдь smile.gif имею абсолютную уверенность в компиляции сего любым компилятором smile.gif
Цитата
Как говорил Ф Энгельс или К Маркс не ошибается тот кто ничего не делает.

Это не классики, это народная мудрость. Причем я знаю и другие русские пословицы и поговорки, на мой взгляд много много более подходящие по теме smile.gif
Цитата
Кстати на Турбо Си подобный текст тоже не проходит.

Надоело. Сильно надоело. Делаем Copy->Paste, добавляем один printf() для наглядности, получаем test.с (см. приложенный архив )
Набираем:
bcc test.c
Получаем:
Код
Borland C++  Version 3.1 Copyright (c) 1992 Borland International
test.c:
Turbo Link  Version 7.1.32.2. Copyright (c) 1987, 1996 Borland International

        Available memory 4155500

И исполняемый файл (тоже в приложении).

Финита ла комедиа....
Прикрепленные файлы
Прикрепленный файл  TEST.rar ( 4.79 килобайт ) Кол-во скачиваний: 30
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 14:50
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Евгений Германович @ Oct 23 2007, 18:33) *
17 ошибок.Попробую отыскать прототип этой функции.Не надо так мрачно пишите хоть в 10 раз больше.


Это не мрачно. Я бы не хотел писать еще столько же - скушно.
Прототип здесь не нужен. Функция нигде не используется. Выкиньте все лишнее из текста. Если есть сомнения - лучше даже не комментируйте, а сотрите. Все инклуды. Может быть функцию main. Вы, кстати, закомментировали stdlib.h но оставили первый хедер. Он вам нужен?

У кривых компиляторов для 8-биток бывают еще тонкости с указателями. Попробуйте для начала скомпилировать функцию

int compar( int arg1, int arg2 )
{
return arg1 - arg2;
}

потом

int compar( int* arg1, int* arg2 )
{
return *arg1 - *arg2;
}


Цитата(Евгений Германович @ Oct 23 2007, 18:45) *
typedef signed int (*_Cmpfun)(char * p1,char * p2);


О!
Компилятор еще не ANSI C. Еще не знает ключевое слово void. Вместо void используйте тип char, выкиньте const.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 15:20
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(Oldring @ Oct 23 2007, 17:50) *
Это не мрачно. Я бы не хотел писать еще столько же - скушно.
Прототип здесь не нужен. Функция нигде не используется. Выкиньте все лишнее из текста. Если есть сомнения - лучше даже не комментируйте, а сотрите. Все инклуды. Может быть функцию main. Вы, кстати, закомментировали stdlib.h но оставили первый хедер. Он вам нужен?

У кривых компиляторов для 8-биток бывают еще тонкости с указателями. Попробуйте для начала скомпилировать функцию

int compar( int arg1, int arg2 )
{
return arg1 - arg2;
}

потом

int compar( int* arg1, int* arg2 )
{
return *arg1 - *arg2;
}
О!
Компилятор еще не ANSI C. Еще не знает ключевое слово void. Вместо void используйте тип char, выкиньте const.

#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };


int compar( char *arg1, char *arg2 )

{ return( *(int *)arg1 - *(int *)arg2 );
}
void main()
{ qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}


Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 51 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 13(65,71): A numeric expression must appear here
1 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 23 21:16:46 2007
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 21:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016