我做了这个简单的程序但我的if语句不能正常工作。 这是我的代码:
try {
JSONObject postData = new JSONObject(response);
postData.put("deviceID", unique_id);
postData.put("depth",postData.get("depth").toString());
//postData.put("xCord", locationObject.get("xCord").toString());
postData.put("location", postData.get("location").toString());
postData.put("yCord",locationObject.get("yCord").toString());
postData.put("size", postData.getInt("size").toString());
new SendData().execute("servername",postData.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
好吧,我可以把s,i,c等于0或1,但if语句总是执行,我的LED在任何情况下都会打开。
如果我在if语句中删除了开启命令,则LED不会打开(这意味着没有其他功能会导致冲突强制LED变为高电平)。 如果我在关闭LED的if语句之后放了一个else,那么所有的LED都会关闭。听起来好像if和else语句不存在,并且LED上的最后一个命令是执行的。 是否可能存在忽略if语句的函数或宏或其他东西?
答案 0 :(得分:4)
您的宏可能会扩展为多个语句,并且不会包含do .. while(0)
。
在{}
语句中使用if
围绕宏。
if(s==1) {
_CONFIG_DRIVE_PORT_OUTPUT_VALUE(...);
}
//...
如评论中所述,原始宏可被视为已损坏,应予以修复。
假设宏被定义为:
#define _CONFIG_DRIVE_PORT_OUTPUT_VALUE(ref, pins, value, chars) \
GPIO##ref##_PIDR &= ~(pins); \
GPIO##ref##_PDOR = ((GPIO##ref##_PDOR & ~(pins)) | (value)); \
GPIO##ref##_PDDR |= (pins);
应该改为:
#define _CONFIG_DRIVE_PORT_OUTPUT_VALUE(ref, pins, value, chars) \
do { \
GPIO##ref##_PIDR &= ~(pins); \
GPIO##ref##_PDOR = ((GPIO##ref##_PDOR & ~(pins)) | (value)); \
GPIO##ref##_PDDR |= (pins); \
} while(0)
如果宏已修复,那么原始代码将无法修改。