Атрибут Mingw64-w64 (формат) и < cinttypes > заголовок

Просто переберите все в индексы в списке и сравните срез с startSequence или endSequence, соответственно. Предполагая, что подписи не должны перекрываться, вы можете использовать один и тот же итератор для обоих циклов.

def myFunctionForSublists(data, startSequence, endSequence):
    positions = iter(range(len(data)))
    for start in positions:
        if data[start:start+len(startSequence)] == startSequence:
            for end in positions:
                if data[end:end+len(endSequence)] == endSequence:
                    yield data[start:end+len(endSequence)]
                    break

Таким образом, цикл start будет продолжаться, когда петля end будет оставаться. Если они могут перекрывать , используйте два отдельных итератора для цикла, то есть for start in range(len(data)): и for end in range(start+1, len(data)):

1
задан Robert Fraser 19 January 2019 в 08:19
поделиться

1 ответ

inttypes красная сельдь, вы получаете то же предупреждение от myPrintf("%lld", 1LL);. Он предупреждает об использовании ll, который в вашей программе (правильно) доставляется макросом inttypes.

Это похмелье от более старых версий MinGW, где форматирование printf было перенаправлено через MSVCRT, который не обрабатывал %lld, поэтому было уместно предупредить.


Вы можете решить проблему, добавив новую верхнюю строку в файл (до включения любого стандарта):

#define __USE_MINGW_ANSI_STDIO 1

и затем используя следующий атрибут:

__attribute__((format(__MINGW_PRINTF_FORMAT, 1, 2))) 
static void myPrintf(const char* fmt, ...)
[ 1115] Это инструктирует mingw-w64 использовать собственную реализацию printf, которая соответствует стандартам ISO, и соответственно получать -Wformat предупреждений. Ссылка на документацию


В моей системе (g ++ 8.2.1) использование %lld и т. Д. На самом деле работает правильно даже без первой строки, поэтому я подозреваю, что они могут иметь по умолчанию исправлено использование ISO stdio вместо MS stdio. Или, возможно, теперь MS stdio знает о %lld.

Возможно, стоит сообщить об ошибке, чтобы указать, что __attribute__((format(printf должен автоматически работать должным образом в зависимости от используемого stdio, без необходимости делать этот обходной путь.

0
ответ дан M.M 19 January 2019 в 08:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: