Невозможно выполнить где-то посередине вызываемой вами функции.Функции - это вещи, которые вы можете вызывать, поэтому запуск функций - это места, с которых может начинаться вызов.Измените это:
void function1() {
do_something;
// <-- I want to start here
do_something_else;
}
На это:
void function2(); // declaration - or just put function2 first
void function1() {
do_something;
function2();
}
void function2() {
do_something_else;
}
Затем вызовите функцию 2 (), если вы хотите выполнить только вторую часть функции 1.
Вместо этого вы можетенапишите такую функцию:
void function1(bool do_the_first_bit) {
if (do_the_first_bit) {
do_something;
}
do_something_else;
}
Редактировать:
В вашем примере, где вы хотите начать внутри цикла, измените это:
void function1() {
load();
while (blah) {
do_stuff;
}
}
на это:
void function2() {
// this avoids the test first time, so as to "start in the loop"
do {
do_stuff;
} while (blah);
}
void function1() {
load();
if (blah) {
function2();
}
}
Затем, когда вы хотите просто выполнить цикл, а не загрузку, вызовите function2()
.
Повторения «бла» в обеих функциях следует избегать, если это возможно -Мне не ясно, означает ли «начало в цикле» «даже если условие цикла ложное, в любом случае запустите цикл один раз», но я интерпретировал это так, потому что это сложнее.
Другая альтернатива здесь:
void play() {
static bool loaded = false;
if (!loaded) {
load();
loaded = true;
}
do_the_other_stuff;
}
Это будет загружать при первом вызове, а не при последующих вызовах.Конечно, это не потокобезопасно, что может быть проблемой: для поточно-ориентированной инициализации ищите pthread_once
или эквивалент .
В стороне:
Некоторые языки(но не C ++) имеет концепцию, называемую «подпрограммой», которая, приблизительно говоря, является функцией, которая может возвращать откуда-то посередине и «запоминать», откуда она вернулась, так что при следующем вызове она возобновляется изто же самое место.Такое поведение может быть подстроено жюри в C или C ++: http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html,, но, безусловно, не рекомендуется делать это в качестве альтернативы определению одной функции для каждой «вещи», которую вы хотите сделать.Совместные процедуры полезны для того, чтобы «подобрать то, на чем вы остановились», а не для «выполнения только отдельных частей функции».