Блог пользователя Burunduk1

Автор Burunduk1, 12 лет назад, По-русски

Доброго времени суток.

Сейчас на сборах школьников к межнару нам регулярно приходится делать задачи... естественным образом мы некоторое время потратили на изучение testlib.h, плодами которого я и хочу поделиться =)

Такое ощущение, что текущий testlib.0.9.7 (revision 106)

  1. Не компилируется под Windows g++ 4.8.1 с -std=c++03 и -std=c++11 (но компилируется с -std=gnu++03 и -std=gnu++11, т.е. с гнусными расширениями стандарта)

  2. Никак не компилируется под MacOS g++ (или таки есть правильный набор ключей?)

И то, и другое лечится выпиливанием некоторых "не нужных" кусков testlib.h. Подскажите, пожалуйста, это уже где-нибудь обсуждалось? Что планируется с этим делать?

Есть еще 3: check.exe input correct-output file-not-found выдает вердикт wrong answer. Это бага или фича? =)

P.S. Совет "делайте в полигоне" не принимается, как минимум, у нас часто другой формат задач.

  • Проголосовать: нравится
  • +22
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

У меня Xcode сходу нормально подцепил testlib. В настройках проекта установлены С++ Language Dialect: -std=gnu++11 С++ Standart Library: libc++

  • »
    »
    12 лет назад, скрыть # ^ |
    ← Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо. Вернется владелец Мака, опробую) А с -std=c++11 не компилит, правильно?

    UPD: g++ оказался 4.2, под ним -std=gnu++98,gnu++03,gnu++11 unrecognized.

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      У меня clang с --std={c++11, c++03} компилит. А какие у тебя ошибки ты с -Werror компилишь? У меня просто вылезает 5 warnings.

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится 0 Проголосовать: не нравится

        clang не могу с ходу попробовать... а g++ у тебя как? Кстати, ты под какой операционкой? Вроде бы у тебя linux был, так под ним все работает, да =) Я без -Werror компилю. Паша мне уже посоветовал откатиться до стабильно 0.9.5. Так вот, компилирую ее, ошибки под винду после g++ -std=c++11 testlib.h:

        In file included from c:\soft\msys\include\fcntl.h:37:0, from testlib.h:141: c:\soft\msys\include\io.h:301:14: error: 'off64_t' does not name a type __CRT_INLINE off64_t lseek64 (int, off64_t, int); ^ c:\soft\msys\include\io.h:302:14: error: 'off64_t' does not name a type __CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence) { ^ testlib.h: In function 'void __testlib_set_binary(FILE*)': testlib.h:346:30: error: '_fileno' was not declared in this scope _setmode(_fileno(file), O_BINARY); ^ ``

        Под мак, оказалось, что версия g++ 4.2, ошибка после g++ -std=c++98 testlib.h:

        testlib.h:2970: error: wrong number of arguments specified for ‘deprecated’ attribute testlib.h:2970: error: wrong number of arguments specified for ‘deprecated’ attribute testlib.h:3234: warning: ‘error’ attribute directive ignored testlib.h:3248: warning: ‘error’ attribute directive ignored testlib.h:3262: warning: ‘error’ attribute directive ignored

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
          ← Rev. 4  
          Проголосовать: нравится 0 Проголосовать: не нравится

          g++-4.{6.4,8.1} тоже скомпилил, операционка ubuntu. Warnings выдаются такие clang:


          ./testlib.h:341:45: warning: unused parameter 'file' [-Wunused-parameter] static void __testlib_set_binary(std::FILE* file) ^ ./testlib.h:1887:31: warning: unused parameter 'color' [-Wunused-parameter] void InStream::textColor(WORD color) ^ ./testlib.h:3283:17: warning: unknown attribute 'error' ignored [-Wattributes] __attribute__ ((error("Don't use random_shuffle(), use shuffle() instead"))) ^ ./testlib.h:3297:17: warning: unknown attribute 'error' ignored [-Wattributes] __attribute__ ((error("Don't use rand(), use rnd.next() instead"))) ^ ./testlib.h:3308:17: warning: unknown attribute 'error' ignored [-Wattributes] __attribute__ ((error("Don't use srand(), you should use "

          g++ бросает при -Wextra только первые 2.

          Мне кажется или такие вещи на которые компиляторы дают warning должны быть выпелены? =)

          • »
            »
            »
            »
            »
            »
            12 лет назад, скрыть # ^ |
            ← Rev. 3  
            Проголосовать: нравится 0 Проголосовать: не нравится

            тьфу, убунта! =) под линуксом все ок. то, о чем я писал в посте, -- mac и windows.

          • »
            »
            »
            »
            »
            »
            12 лет назад, скрыть # ^ |
            ← Rev. 2  
            Проголосовать: нравится -8 Проголосовать: не нравится

            Очень странные warning.

            Последние три еще хотя бы логичные. Ну не знает он такой атрибут. Другой вопрос, какого черта в clang определена константа __GNUC__.

            Второй ладно. Этот параметр используется только под виндой, и надо бы честно под линуксом написать, что он unused. А первый — какая-то ахинея. Там эту штуку куда-то дальше передают.

          • »
            »
            »
            »
            »
            »
            12 лет назад, скрыть # ^ |
            ← Rev. 2  
            Проголосовать: нравится 0 Проголосовать: не нравится

            на которые компиляторы дают warning должны быть выпелены? =)

            +1. Помнишь про "Неугомонный Паша"?)

            UPD: link

            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, скрыть # ^ |
               
              Проголосовать: нравится 0 Проголосовать: не нравится

              Вполне возможно это было без меня. Или я был не в состоянии мыслить и запоминать, что происходит.

        • »
          »
          »
          »
          »
          9 лет назад, скрыть # ^ |
          ← Rev. 3  
          Проголосовать: нравится 0 Проголосовать: не нравится

          Я не разобрался во всех тонкостях, но тем кто, как я, наткнулся на error: 'off64_t' does not name a type сообщаю, что у меня под MinGW/MSYS достаточно было вместо

          $ g++ --std=c++11

          сказать

          $ g++ --std=gnu++11

          и всё ОК.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Извините за оффтоп. На какой программе вы делаете условия задач?