Вышла новая версия библиотеки libC для использования в TinyC и GCC.
Что нового:
Исправлены ошибки в функциях работы с файлами и с системными вызовами KolibriOS.
Добавлены новые функции для работы с системными вызовами KolibriOS. Добавлены функции для
форматированного вывода : printf(), fprintf(), sprintf(), snprintf(), vsnprintf().
Для вещественных чисел пока что поддерживается только форматированный вывод (%f ), а
експоненциальный вывод(%e) ещё не реализован.
Функции форматированного вывода корректно работают только в GCC, потому что TinyC
неправильно работает с функциями, содержащими переменное число аргументов.
Компилятор TinyC(для KolibriOS) вместе с собранными библиотеками(libC, libm) вы можете
загрузить отсюда:
ftp://kolibrios.org/upload/ktcc.7z
The new version of library libC for use in TinyC and GCC has left.
That new:
Mistakes in functions of work with files and with system calls KolibriOS are corrected.
New functions for work with system calls KolibriOS are added. Functions for format output
are added: printf (), fprintf (), sprintf (), snprintf (), vsnprintf (). For material
numbers it is meanwhile supported only format output the (%f), and exponential output a (%e)
is not realized yet.
Functions for format output correctly work only in GCC because TinyC incorrectly works with
the functions containing variable number of arguments.
Compiler TinyC (for KolibriOS) together with the collected libraries (libC, libm) you can
load from here:
ftp://kolibrios.org/upload/ktcc.7z
Tiny C Compiler
-
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Хорошая новость. Надеюсь ты будешь постоянно поддерживать libc, а так же возмешься за другие образующие си библиотеки, например pthread.
..bw
..bw
Неверю что TinyC
На офсайтенеправильно работает с функциями, содержащими переменное число аргументов.
http://fabrice.bellard.free.fr/tcc/tcc-doc.htmlCurrently implemented ISOC99 features:
- Variadic macros: __VA_ARGS__ can be used for function-like macros:
#define dprintf(level, __VA_ARGS__) printf(__VA_ARGS__)
dprintf can then be used with a variable number of parameters.
vectoroc
Ты смотриш на TinyC с наблюдательской точки зрения и не проводиш никаких тестов этого компилятора.
Я провел сотни тестов этого компилятора и выяснил всякие особенности этого компилятора. Что он поддерживает, а что неподдерживает.Что поддерживает частично.И что в нём поддерживается, но работает некорректно.
Вот тест на работу с переменным числом параметров. Скомпилируй его при помощи ktcc.kex .Параметры для компиляции такие: ktcc.kex -o test.kex test.c -lck
Запусти доску отладки и запусти test. А потом сравни то, что выведено на неё,с тем, что должно было быть выведено.
Ты смотриш на TinyC с наблюдательской точки зрения и не проводиш никаких тестов этого компилятора.
Я провел сотни тестов этого компилятора и выяснил всякие особенности этого компилятора. Что он поддерживает, а что неподдерживает.Что поддерживает частично.И что в нём поддерживается, но работает некорректно.
Вот тест на работу с переменным числом параметров. Скомпилируй его при помощи ktcc.kex .Параметры для компиляции такие: ktcc.kex -o test.kex test.c -lck
Запусти доску отладки и запусти test. А потом сравни то, что выведено на неё,с тем, что должно было быть выведено.
Code: Select all
#include <stdio.h>
#include <stdlib.h>
int test_func(const char *format,...)
{
va_list ap;
int integer_digit;
long long_digit;
float real_digit;
char c;
va_start(ap,format);
debug_out_str("\nbegin test...\n");
c=va_arg(ap,int);
if (c=='A') {debug_out_str("simbol test ok\n");}
integer_digit=va_arg(ap,int);
if (integer_digit==12345) {debug_out_str("int test ok\n");}
long_digit=va_arg(ap,long);
if (long_digit==123456789) {debug_out_str("long test ok\n");}
real_digit=va_arg(ap,double);
if (real_digit==123.45) {debug_out_str("float test ok\n");}
c=va_arg(ap,int);
if (c=='B') {debug_out_str("next simbol(B) test ok\n");}
debug_out_str("test finished\n");
}
int main(int argc, char **argv)
{
int a;
long b;
float c;
a=12345;
b=123456789;
c=123.45;
test_func("Test %c,%d,%d,%f,%c",'A',a,b,c,'B');
}
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
В этом ты прав...Ты смотриш на TinyC с наблюдательской точки зрения и не проводиш никаких тестов этого компилятора.
Попробуем разобраться. На первый взгляд
test_func("Test %c,%d,%d,%f,%c",'A',a,b,c,'B'); - c=va_arg(ap,int);
почему int? Мне до сих пор кажется что ты сделал поспешный вывод.
Посмотри файл tcctest.c в programs\develop\metcc\trunk\source на svn, там есть пример работы на данную тему. Проверять мне лень, но мне так кажется разрабы постарались бы в тестовый файл только рабочий код ложить
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int test_func(const char *format,...)
{
va_list ap;
int integer_digit;
long long_digit;
double real_digit;
char c;
va_start(ap,format);
printf("\nbegin test...\n");
c = va_arg(ap,char);
if (c=='A') {printf("simbol test ok\n");}
integer_digit= va_arg(ap,int);
if (integer_digit==12345) {
printf("int test ok\n");
}
long_digit=va_arg(ap,long);
if (long_digit==123456789) {printf("long test ok\n");}
real_digit=va_arg(ap,double);
if (real_digit==123.45) {printf("float test ok\n");}
c=va_arg(ap,int);
if (c=='B') {printf("next simbol(B) test ok\n");}
printf("test finished\n");
va_end(ap);
}
int main(int argc, char **argv)
{
int a;
long b;
float c;
a=12345;
b=123456789;
c=123.45;
test_func("Test %c,%d,%d,%f,%c",'A',a,b,c,'B');
}
И всё работает... собственно даже без изменений твой код работает, только прописать ещё stdargs.
Так что твои упрёки в сторону разрабов tcc безпочвенны
Переложите куда нить пожалуйста, на FTP видимо файла уже нет, а на первом адресе что из первого поста темы - 404
Взял исходники ktcc из subversion trunk, нашел версию оригинального tcc, из которого они сделаны. Скачал git-ом соответствующий тэг "release_0_9_23", cделал diff. Прикладываю его здесь.
Потом взял последний tcc из git-а (бранч "mob"), и смерджил предыдущий патч на современный распоследний tcc. Вот что получилось.
Сразу скажу, компилировать даже не пробовал, mingw еще компилится, но основная работа (вроде бы) сделана. Выкладываю сюда чтобы не забыть/потерять.
Для тех, кто хочет экспериментировать:
Потом взял последний tcc из git-а (бранч "mob"), и смерджил предыдущий патч на современный распоследний tcc. Вот что получилось.
Сразу скажу, компилировать даже не пробовал, mingw еще компилится, но основная работа (вроде бы) сделана. Выкладываю сюда чтобы не забыть/потерять.
Для тех, кто хочет экспериментировать:
Code: Select all
git clone git://repo.or.cz/tinycc.git
cd tinycc
git checkout mob
patch -p0 < NEW-0001-Support-for-KolibriOS.patch
- Attachments
-
-
- Новый патч
Downloaded 229 times
-
0001-Added-support-for-KolibriOS.patch.gz (12.49 KiB)
- Старый патч
Downloaded 228 times
-
В чем разница между новым патчем и старым патчем?
Старый - для древней версии tcc - 0.9.23 - выпущена в 2005-06-17.
Новый - для последнего среза tcc из git (последний коммит был 3 дня назад)
Новый - для последнего среза tcc из git (последний коммит был 3 дня назад)
А чего он такой мелкий стал?
Скачай да посмотри. Меньше править пришлось
sourcerer@debian-laptop:~/Загрузки/tinycc/tinycc$ patch -p0 < ../../NEW-0001-Added-support-for-KolibriOS.patch
patching file b/Makefile
Hunk #1 FAILED at 285.
1 out of 1 hunk FAILED -- saving rejects to file b/Makefile.rej
patching file b/console.asm
patching file b/libtcc.c
Hunk #1 FAILED at 63.
Hunk #2 FAILED at 1327.
Hunk #3 FAILED at 1341.
Hunk #4 FAILED at 1623.
4 out of 4 hunks FAILED -- saving rejects to file b/libtcc.c.rej
patching file b/stab.def
Hunk #1 FAILED at 178.
1 out of 1 hunk FAILED -- saving rejects to file b/stab.def.rej
patching file b/start.asm
patching file b/tcc.c
Hunk #1 FAILED at 479.
Hunk #2 FAILED at 611.
2 out of 2 hunks FAILED -- saving rejects to file b/tcc.c.rej
patching file b/tcc.h
Hunk #1 FAILED at 35.
Hunk #2 FAILED at 58.
Hunk #3 FAILED at 110.
Hunk #4 FAILED at 169.
Hunk #5 FAILED at 188.
Hunk #6 FAILED at 1324.
6 out of 6 hunks FAILED -- saving rejects to file b/tcc.h.rej
patching file b/tccelf.c
Hunk #1 FAILED at 2189.
Hunk #2 FAILED at 2740.
Hunk #3 FAILED at 2834.
3 out of 3 hunks FAILED -- saving rejects to file b/tccelf.c.rej
patching file b/tcckos.c
Тогда -p1 должен помочь, вместо -p0
Киньте кто нибуть последнюю версию tcc под колибри
to infinity and beyond
Who is online
Users browsing this forum: No registered users and 6 guests