Вы не можете использовать break;
таким образом, оно должно появляться внутри тела цикла for
.
Есть несколько способов сделать это, но ни один не рекомендуется:
Вы можете выйти из программы с помощью функции exit()
. Поскольку цикл запускается из main()
, и вы ничего не делаете после него, можно добиться того, чего вы хотите, таким образом, но это как особый случай.
Вы можете установить глобальную переменную в функции и проверить ее в цикле for
после вызова функции. Использование глобальных переменных обычно не рекомендуется.
вы можете использовать setjmp()
и longjmp()
, но это все равно, что пытаться раздавить муху молотком, вы можете сломать другие вещи и вообще пропустить муху. Я бы не рекомендовал такой подход. Кроме того, требуется jmpbuf
, что вам нужно будет передать в функцию или получить доступ в качестве глобальной переменной.
Приемлемой альтернативой является передача адреса переменной status
в качестве дополнительного аргумента: функция может установить его, чтобы указать необходимость выхода из цикла.
Но, безусловно, лучший подход в C - возвращать значение для проверки продолжения , оно наиболее читаемо.
Из ваших объяснений у вас нет исходного кода для foo()
, но вы можете обнаружить некоторые условия в функции, которую вы можете изменить, вызывая прямо или косвенно с помощью foo()
: longjmp()
выпрыгнет из своего местоположения, глубоко внутри foo()
, возможно, много уровней вниз по стеку вызовов, до местоположения setjmp()
, минуя обычный код завершения функции для всех промежуточных вызовов. Если это именно то, что вам нужно сделать, чтобы избежать сбоя, setjmp()
/ longjmp()
является решением, но оно может вызвать другие проблемы, такие как утечка ресурсов, отсутствующая инициализация, несогласованное состояние и другие источники неопределенного поведения.
Обратите внимание, что ваш цикл for
будет повторяться 101
раз, потому что вы используете оператор <=
. Идиоматический цикл for
использует for (int i = 0; i < 100; i++)
для итерации в точности столько раз, сколько отображается в качестве верхней (исключенной) границы.
Firebug должен отображать его на панели Net.
] РЕДАКТИРОВАТЬ : Кроме того, если Firebug замедляет ваш Firefox так, что он становится непригодным для использования, как это иногда бывает у меня, WireShark (ранее Ethereal) проанализирует весь сетевой трафик в вашей системе, включая Запросы HTTP и AJAX.
Firebug показывает их как на панели «Сеть», так и в представлении консоли. Однако вам нужно включить «Показать XMLHttpRequests».
Я использовал почти все крупные инструменты (скрипач, firebug, httpfox, живые заголовки http). На мой взгляд, лучший вариант - HTTPFox , если вы используете Firefox, потому что он имеет простые возможности фильтрации, позволяет просматривать ваш JSON-запрос / ответ как необработанный или отформатированный, а общий интерфейс очень чистый.
Кроме того, я не могу обойтись без WFetch для тестирования веб-сервисов и прочего AJAX. Обычно я беру запрос от HTTPFox и вставляю его в WFetch. Таким образом, мне не нужно каждый раз заходить в браузер. Я просто нажимаю F5 в WFetch, чтобы воспроизвести запрос, и напрямую изменяю его.
Боковое примечание: в WFetch будьте осторожны с длиной содержимого, если у вас есть полезные данные POST. Если вы изменяете полезную нагрузку, длину содержимого необходимо изменить соответствующим образом. По этой причине я сохраняю свои запросы в файл и указываю WFetch на этот файл. В самом файле легко узнать длину строки и изменить на нее длину содержимого.
(источник: koreus.com )
альтернативный текст http: //www.port80software .com / assets / images / ld_wfetch3.gif
Посмотрите на данные о вмешательстве как хорошо. Это надстройка Firefox, которая позволяет вам просматривать каждый отдельный HTTP-запрос (включая любые данные публикации) и ответ, а также их заголовки. Я нашел его очень полезным для отладки проблем с AJAX ... хотя Firebug отлично работает.
Fiddler 2 - отличный инструмент для отслеживания HTTP-трафика.
* Обновление 2014 г. *
Со времени моего первоначального сообщения и Internet Explorer, и Chrome добавили встроенного разработчика инструменты, которые весьма полезны. Хотя я по-прежнему поддерживаю и использую Fiddler для HTTP-мониторинга, не связанного с сетью, или когда мне нужно действительно копаться в деталях и изменять запросы в пути, в наши дни я в значительной степени использую встроенные инструменты IE или Chrome, поскольку их достаточно для 99% моих потребностей. У них обоих есть вкладка сети, где вы можете отслеживать HTTP-запросы, а также другие полезные функции для отладки веб-страниц.