Добавление области видимости к вызовам функций

#c #c

#c #c

Вопрос:

Как бы я создал функцию, которая позволяет открывать скобки после вызова функции и объявлять код внутри скобок, аналогично этому:

 openScopeBrackets();
{
//...code here
}
closeScopeBrackets();
  

Я тоже видел это с OpenGL:

 glBegin(GL_TRIANGLES);
{
//...code here
}
glEnd()
  

Пожалуйста, помогите мне…

Ответ №1:

Трудно сказать, что вы хотите сделать, но локальная область создается просто путем добавления { } внутри тела функции. Переменные, объявленные в этой области, не будут видны за ее пределами.

 void doSomething()
{
    int i;
    {

        //Local Scope


    }
}
  

Комментарии:

1. @TehCodr вы можете поместить пару скобок практически в любом месте, чтобы создать новую область видимости. И это все, что он делает: создайте новую область видимости, чтобы переменные, объявленные внутри скобок, исчезли в конце } .

2. @TehCodr: везде, где вы ставите { amp; } , создается локальная область видимости.

3. @TehCodr: Неясно, какой эффект, по вашему мнению, это должно иметь «с вызовами функций». Использование {} для создания области видимости не зависит от каких-либо вызовов функций. Таким образом, он «работает» с вызовами функций, но он просто делает то же самое, что и без вызова функции.

4. @SethCarnegie: Variables declared inside the brackets will disappear at the ending будет зависеть от типа их хранилища. static Переменная на самом деле не исчезнет. Он остается в силе.

5. @Als true верно, забыл об static .

Ответ №2:

В C / C функция может быть вызвана только из любой другой функции. Но мы НЕ можем определять функции в других функциях. Таким образом, невозможно сначала вызвать функцию, а затем написать код для вызываемой функции.

 void fName(){
    otherFunction(){//NOT allowed
        ...definition for otherFunction
    }
}
  

Комментарии:

1. GCC принимает это как языковое расширение, называемое вложенной функцией gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Nested-Functions.html но это работает только для C, а не для C

2. Я не хочу пробовать функциональную концепцию, я просто хочу вызвать функцию, а затем поместить объявления, которые следуют за функцией, специфичной для функции, в скобки. Обратитесь к glBegin и glEnd…

Ответ №3:

Если вы хотите, чтобы что-то происходило в начале и в конце блока, вы можете использовать для этого конструктор / деструктор.

Посмотрите на QMutexLocker в качестве вдохновляющего примера, чтобы понять, что я имею в виду.