0

我在编译我的 pebble watchapp 时遇到问题。我正在尝试将字符串发送到手机上的 Pebbl eJS 脚本,例如:

Tuplet password_tuple = TupletCString(PASSWORD_KEY, password_str);
Tuplet email_tuple = TupletCString(EMAIL_KEY, email_str); 

编译器错误是:(它们都像这样出错,这只是下面的输出行之一)

./src/app_test.c:84:25: error: the address of 'email_str' will always evaluate as 'true'   [-Werror=address]

email_str 和 password_str 在程序顶部定义,如下所示:

static char email_str[30];
static char password_str[30];
#define PASSWORD_PKEY (int32_t)21
#define EMAIL_PKEY (int32_t)20

有没有人注意到这有什么问题?

4

2 回答 2

3

@ismail-badawi 的回答非常正确。

Pebble 现在建议您使用dict_write_cstring.

dict_write_cstring(&iter, SOME_STRING_KEY, string);
于 2014-03-12T01:17:07.643 回答
2

好吧,这当然不是很明显,但事实证明这是因为它TupletCString是一个宏,它会扩展为一个包含email_str ? strlen(email_str) + 1 : 0子表达式的表达式,这就是导致错误的原因,因为email_str不能为空,所以比较不是t 做任何事。

在 Pebble 论坛上找到了这个帖子并给出了解释。建议的解决方法是定义您自己的没有条件的宏,例如

#define MyTupletCString(_key, _cstring) \
((const Tuplet) { .type = TUPLE_CSTRING, .key = _key, .cstring = { .data = _cstring, .length = strlen(_cstring) + 1 }})
于 2014-03-10T07:19:07.370 回答