|
|
  |
QSORT |
|
|
|
Oct 23 2007, 13: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
Ну и ??? Кстати эта строка вставляется автоматически при создании проекта.
|
|
|
|
|
Oct 23 2007, 13:24
|

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

|
Цитата(Евгений Германович @ Oct 23 2007, 17:16)  Ну и ??? Кстати эта строка вставляется автоматически при создании проекта. А, понятно, это какие-то особенности конкретного компилятора. Не умеет компилировать stdlib.h без указания устройства, под которое ведется компиляция. Чтобы не портить исходник всякими левыми автоматически сгенерированными хедерами - соответссующее определение наверняка можно вставить в опциях проекта. Вы, вероятно, в первый раз пытаетесь писать на С? Скопируйте для начала какой-нибудь пример, который обычно идет с компилятором, в отдельный каталог. Потом добейтесь его компиляции. Когда будет компилироваться - можно будет дойти до qsort. Так как я с этим компилятором, вероятно, не работал - более подробно объяснить не смогу, как это сделать. То, что такая строка генерируется автоматически при создани проекта, скорее всего, говорит о качестве компилятора. Птому что бэкслеш - это префикс escape последовательности. И так писать include нехорошо, даже если конкретный компилятор и проглатывает.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 13:26
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 23 2007, 13:49
|
Частый гость
 
Группа: Новичок
Сообщений: 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 модели и т п "лабуда". Посмотрите опции компиляции модели или компилятора...
|
|
|
|
|
Oct 23 2007, 13:56
|

Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 23 2007, 14:07
|

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

|
Цитата(Евгений Германович @ Oct 23 2007, 16:56)  Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова. Не обижайтесь, но я не буду заниматься ерундой компилируя совершенно очевидные вещи. Если угодно, то можете считать, что я откомпилировал и ошибок не получил  Цитата(Oldring @ Oct 23 2007, 16:36)  Поэтому там именно строка. Кстати, старые С компиляторы не кушали с одинарными бэкслешами. Это потом появились слишком умные в рассчете на типичные ошибки неопытных программистов. Дело обстоит с точностью до наоборот - возьмите, например BCC 1992 года (можете и более поздние 3.1 ) и попробуйте ему скормить любой двойной слэш.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 23 2007, 14:15
|

Гуру
     
Группа: Свой
Сообщений: 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.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 14:24
|

Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 23 2007, 14:45
|

Профессионал
    
Группа: Свой
Сообщений: 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; } } Вот прототип.ВЫ считаете те слова,что были написаны это помощ?
|
|
|
|
|
Oct 23 2007, 14:45
|

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

|
Цитата(Евгений Германович @ Oct 23 2007, 17:11)  Вы похоже весьма опасаетесь получить отрицательный результат.Не бойтесь. Отнюдь  имею абсолютную уверенность в компиляции сего любым компилятором  Цитата Как говорил Ф Энгельс или К Маркс не ошибается тот кто ничего не делает. Это не классики, это народная мудрость. Причем я знаю и другие русские пословицы и поговорки, на мой взгляд много много более подходящие по теме  Цитата Кстати на Турбо Си подобный текст тоже не проходит. Надоело. Сильно надоело. Делаем 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
|
|
|
|
|
Oct 23 2007, 14:50
|

Гуру
     
Группа: Свой
Сообщений: 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.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 15:20
|

Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|