Я дал образец для иллюстрации того, какой стиль присваивания я имею в виду в строке # 6.Является ли такой стиль назначения хорошо определенным?
1 #include<stdio.h>
2
3 int main(int argc,char *argv[])
4 {
5 int a,b,c;
6 c = ({ a=5; b = a+1;});
7 printf("%d\n%d\n%d\n",a,b,c);
8 return 0;
9 }
Я не уверен, что {}
is.It не Initializer список, используемый в массиве int arr[]={1,2,3}
.
Update: Может быть с помощью этого метода можно определить функцию в функции или, возможно, ошибка в GCC (версия 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1))
1 #include<stdio.h>
2 #include<math.h>
3 int main(int argc,char *argv[])
4 {
5 int a,b;
6 b = ({int cos(i){return 0;};a = 0;cos(a);});
7 printf("%d\n%d\n",a,b);
8 b = cos(0);
9 printf("%d\n%d\n",a,b);
10 return 0;
11 }
Выход:
0
0
0
1
http://stackoverflow.com/questions/1635549/in-what-versions-of-c-is-a-block-inside-parenthesis-used-to-return-a-value-valid – DCoder
Возможно, gcc - pedantic -wall - хороший выбор для меня – yuan