Набросился на какой-то код, как это в нашей базе кода ..., что заставило меня волноваться.Возвращаемое значение из локального объема?
int foo(int a); // Forward declaration.
int baz() {
int result = {
int a = dosomestuff();
foo(a);
} ? 0 : -1;
return result;
}
- хорошо Определена ли поведение этого кода?
- Будет ли это действительно работать, что переменная
result
загружается с 0 или -1 в зависимости от возвращаемого значенияfoo(a)
?
Для интереса: Код был написан не так изначально - тем не менее, это то, что я представляю себе этот невинный вид макрос раскатываются ...
int foo(int a); // Forward declaration.
#define BAR() { int a = dosomestuff(); foo(a); }
int baz() {
int result = BAR() ? 0 : -1;
return result;
}
Yow. Что компилятор C принимает? gcc конечно нет. – aschepler 2010-12-08 18:49:21
@aschepler: по иронии судьбы, кажется, что GCC является * единственным * компилятором, который его принимает! См. Ответ Майкла Берра. – 2010-12-08 19:07:24
Компилятор VisualDSP ++ от Analog Devices. Я, вероятно, попрошу об этом завтра. – 2010-12-08 20:49:26