解决变量名被#define的问题
16lz
2021-01-26
今天在移植一个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>
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>
更多相关文章
- Cocos2d-x 新版本中android震动
- MQTT客户端移植Android
- android 动画一 (帧动画FrameAnimation)
- 游戏移植的注意事项
- 通过SVN导入两个项目(从java移植到andorid)时,一个android,一个普通
- 【Android(安卓)如何置底一个View(附 前置声明layout布局文件中的
- 移植ffmpeg中的H264解码部分到Android
- Ubuntu 12.04 编译Android(安卓)4.0.3 的环境配置
- 在英特尔® 凌动™ 处理器上将 OpenGL* 游戏移植到 Android* (第