У меня странное желание; Я не знаю, позволяет ли это какой-либо компилятор или расширение языка.
Я хочу иметь возможность объявлять переменные внутри вызова функции, например:
int test(int *out_p) {
*out_p = 5;
return 1;
}
int main()
{
if (int ret = test(int &var)) { // int var declared inside function invocation
fprintf(stderr, "var = %d\n", var); // var in scope here
}
return 0;
}
потому что тогда область действия var следует за областью действия ret. Для другого примера (из проекта, над которым я сейчас работаю), у меня есть
cmd_s = readline();
int x, y, dX, dY, symA, symB;
if (sscanf(cmd_s, "placeDomino:%d %d atX:%d y:%d dX:%d dY:%d",
&symA, &symB, &x, &y, &dX, &dY) == 6) {
do_complicated_stuff(symA, symB, x, y, dX, dY);
} else if (sscanf(cmd_s, "placeAtX:%d y:%d dX:%d dY:%d", &x, &y, &dX, &dY) == 4) {
do_stuff(x, y, dX, dY);
/* symA, symB are in scope but uninitialized :-( so I can accidentally
* use their values and the compiler will let me */
}
и я бы предпочел написать
cmd_s = readline();
if (sscanf(cmd_s, "placeDomino:%d %d atX:%d y:%d dX:%d dY:%d",
int &symA, int &symB, int &x, int &y, int &dX, int &dY) == 6) {
do_complicated_stuff(symA, symB, x, y, dX, dY);
} else if (sscanf(cmd_s, "placeAtX:%d y:%d dX:%d dY:%d", int &x, int &y, int &dX, int &dY) == 4) {
do_stuff(x, y, dX, dY);
/* Now symA, symB are out of scope here and I can't
* accidentally use their uninitialized values */
}
У меня вопрос, поддерживает ли это какой-либо компилятор? Поддерживает ли это gcc, если я правильно тереть? Есть спецификация C или C ++ (черновик), которая имеет это?
Edit: только что понял, что в моем первом примере кода мое объявление int ret также не годится в C99; Я думаю, что я избалован петлями. Я тоже хочу эту функцию; представь
while(int condition = check_condition()) {
switch(condition) {
...
}
}
или что-то в этом роде.