Tiny C Compiler

...
  • Хорошая новость. Надеюсь ты будешь постоянно поддерживать libc, а так же возмешься за другие образующие си библиотеки, например pthread.

    ..bw
  • Неверю что TinyC
    неправильно работает с функциями, содержащими переменное число аргументов.
    На офсайте
    Currently 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.
    http://fabrice.bellard.free.fr/tcc/tcc-doc.html
  • vectoroc

    Ты смотриш на 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!
  • Ты смотриш на 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');
    
    }
    Переборол свою лень, взял оригинальный tcc, скомпилил tcc.exe test.c -o test.exe -I"..\include" -L"..\lib"
    И всё работает... собственно даже без изменений твой код работает, только прописать ещё stdargs.
    Так что твои упрёки в сторону разрабов tcc безпочвенны
  • Переложите куда нить пожалуйста, на FTP видимо файла уже нет, а на первом адресе что из первого поста темы - 404
  • Взял исходники ktcc из subversion trunk, нашел версию оригинального tcc, из которого они сделаны. Скачал git-ом соответствующий тэг "release_0_9_23", cделал diff. Прикладываю его здесь.
    Потом взял последний 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
    Старый патч
    Downloaded 228 times
  • В чем разница между новым патчем и старым патчем?
  • Старый - для древней версии tcc - 0.9.23 - выпущена в 2005-06-17.
    Новый - для последнего среза 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