在使用select来操作socket的时候,一般都是会这么写
1 |
int err = TEMP_FAILURE_RETRY(select(socket_fd + 1, NULL, &set, NULL, const_cast<struct timeval*>(&timeout))); |
其中的“TEMP_FAILURE_RETRY”宏在“unistd.h”中的定义如下:
1 2 3 4 5 6 7 |
/* Used to retry syscalls that can return EINTR. */ #define TEMP_FAILURE_RETRY(exp) ({ \ typeof (exp) _rc; \ do { \ _rc = (exp); \ } while (_rc == -1 && errno == EINTR); \ _rc; }) |
正常情况下,编译是没问题的。但是当在“Application.mk”中增加
1 |
APP_CPPFLAGS += -std=c++11 |
之后,发现编译不通过了。报告“error: 'typeof' was not declared in this scope”。
解决方法:
1 |
APP_CPPFLAGS += -std=gun++11 |
“c++11”和“gnu++11”的差别:
“gnu++11”增加了很多的扩展“c++11”的功能,功能更加多,具体的扩展参考Extensions to the C++ Language