解决变量名被#define的问题

今天在移植一个Linux C程序到 Android 源码层时遇到一个问题,记录下来已备其他遇到此类问题的朋友查阅:
In file included from ******.c:82:0:
bionic/libc/kernel/common/linux/sysctl.h:37:24: error: expected identifier or '(' before '[' token
查看sysctl.h代码, 如下
struct __sysctl_args {
 int __user *name;
 int nlen;
 void __user *oldval;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 size_t __user *oldlenp;
 void __user *newval;
 size_t newlen;
 unsigned long __unused[4];
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
37行即:
 unsigned long __unused[4];
原因是__unused这个成员名已经在其他地方被声明了,即
#define __unused ***
这里再使用的话就会报错,解决方案是在
******.c: 文件引用sysctl.h之前声明: #undef __unused,即:
#undef __unused
#include <linux/sysctl.h>

你可能感兴趣的:(c,android,android,linux,native,gun)