Доброго времени суток.
Сейчас на сборах школьников к межнару нам регулярно приходится делать задачи... естественным образом мы некоторое время потратили на изучение testlib.h, плодами которого я и хочу поделиться =)
Такое ощущение, что текущий testlib.0.9.7 (revision 106)
Не компилируется под Windows g++ 4.8.1 с -std=c++03 и -std=c++11 (но компилируется с -std=gnu++03 и -std=gnu++11, т.е. с гнусными расширениями стандарта)
Никак не компилируется под MacOS g++ (или таки есть правильный набор ключей?)
И то, и другое лечится выпиливанием некоторых "не нужных" кусков testlib.h. Подскажите, пожалуйста, это уже где-нибудь обсуждалось? Что планируется с этим делать?
Есть еще 3: check.exe input correct-output file-not-found выдает вердикт wrong answer. Это бага или фича? =)
P.S. Совет "делайте в полигоне" не принимается, как минимум, у нас часто другой формат задач.
У меня Xcode сходу нормально подцепил testlib. В настройках проекта установлены
С++ Language Dialect: -std=gnu++11
С++ Standart Library: libc++
Спасибо. Вернется владелец Мака, опробую) А с -std=c++11 не компилит, правильно?
UPD: g++ оказался 4.2, под ним -std=gnu++98,gnu++03,gnu++11 unrecognized.
У меня clang с --std={c++11, c++03} компилит. А какие у тебя ошибки ты с -Werror компилишь? У меня просто вылезает 5 warnings.
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
g++-4.{6.4,8.1} тоже скомпилил, операционка ubuntu. Warnings выдаются такие clang:
g++ бросает при -Wextra только первые 2.
Мне кажется или такие вещи на которые компиляторы дают warning должны быть выпелены? =)
тьфу, убунта! =) под линуксом все ок. то, о чем я писал в посте, -- mac и windows.
Очень странные warning.
Последние три еще хотя бы логичные. Ну не знает он такой атрибут. Другой вопрос, какого черта в clang определена константа
__GNUC__
.Второй ладно. Этот параметр используется только под виндой, и надо бы честно под линуксом написать, что он unused. А первый — какая-то ахинея. Там эту штуку куда-то дальше передают.
Что значит какого черта? =) Она там всегда определена.
Не определён O_BINARY потому и unused.
Clang позиционируется как drop-in замена GCC, поэтому эмулирует его особенности, в том числе
__GNUC__
.Но какие-то из атрибутов для gcc не умеет. А как их тогда различать?
Вот так:
Или так:
+1. Помнишь про "Неугомонный Паша"?)
UPD: link
Вполне возможно это было без меня. Или я был не в состоянии мыслить и запоминать, что происходит.
Я не разобрался во всех тонкостях, но тем кто, как я, наткнулся на
error: 'off64_t' does not name a type
сообщаю, что у меня под MinGW/MSYS достаточно было вместо$ g++ --std=c++11
сказать
$ g++ --std=gnu++11
и всё ОК.
Извините за оффтоп. На какой программе вы делаете условия задач?
Когда я захотел пересобрать вот эту PDF-ку (там криво отображаются иллюстрации), я использовал proTeXt.