C varargs - проблемы va_copy

Во-первых, можно также рассмотреть создание процесса получения и проверки входа функция; в той функции можно просто возвратить значение, если его корректные, и продолжают вращаться в в то время как цикл если нет. Это по существу устраняет проблему, которую Вы решили и можете обычно применяться в более общем случае (убегающий из нескольких циклов). Если Вы абсолютно должны сохранить эту структуру в своем коде, и действительно не хотите иметь дело с бухгалтерскими булевскими переменными...

можно также использовать goto следующим образом (использующий модуль Жертв первоапрельской шутки от здесь ):

#import the stuff
from goto import goto, label

while True:
    #snip: print out current state
    while True:
        ok = get_input("Is this ok? (y/n)")
        if ok == "y" or ok == "Y": goto .breakall
        if ok == "n" or ok == "N": break
    #do more processing with menus and stuff
label .breakall

я знаю, я знаю, "Вы не должны использовать goto" и все это, но он работает хорошо в странных случаях как это.

6
задан Chris Lutz 11 August 2009 в 09:24
поделиться

1 ответ

(a) = (b) ненадежно. Даже передача двух va_list is (общедоступная функция будет простой оболочкой), поскольку va_list может быть примерно таким:

typedef __va_list_impl va_list[1];

для которого выполнение va_arg на одном будет изменять другое (я, кажется, помню, что Solaris использовать такие вещи, ах, окна регистров ...). К сожалению, я не знаю верного способа сделать то, что вы хотите.

3
ответ дан 17 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

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