#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 в качестве вдохновляющего примера, чтобы понять, что я имею в виду.