c gtk 警告:初始化从指针生成整数
c gtk warning: initialization makes integer from pointer
如何从 gpointer 获取变量以便使用它。
void
right_y (GtkButton *button, gpointer on)
{
right(on);
}
这里是回调部分
带有 char on = "y"; 的行给出警告:初始化从指针生成整数而不进行强制转换 [-Wint-conversion]
gsignal 行发出警告:从不同大小的整数转换为指针 [-Wint-to-pointer-cast]
char on = "y";
button = gtk_button_new_with_label ("Led On");
g_signal_connect (button, "clicked", G_CALLBACK (right_y), (gpointer) on);
我尝试了几种不同的方法,但仍然无法理解。
谢谢。
char on = "y";
声明 on
持有 一个 char
。字符串不止一个 char
,因此您需要将它们存储为指向 char
或 char
数组的指针。
问题是您希望能够用 on
做什么决定了要使用的正确类型。但我想鉴于 post 中错误的性质,您已经知道这一点并且被 gpointer
.
搞糊涂了
gpointer
基本上就是
typedef void *gpoiner;
这就是为什么您不需要用 gpointer
指定 *
的原因。不要让这愚弄你;当您将其他指针类型与 gpointer
一起使用时,您仍然需要对其他指针类型使用 *
!
还有g_signal_connect()
行是错误的; gpointer on
没有意义。
如果您仍然不明白我在说什么,请告诉我。
好的,那为什么
char on = "y";
吐出消息
warning: initialization makes integer from pointer without a cast [-Wint-conversion]
?
"y"
是一个指针。它的计算结果为 const char *
类型的表达式。该指针可能驻留在可执行文件的代码部分,无法对其进行修改(因此 const
)。
char
是整数,不是指针。除非您明确要求,否则您通常不应该能够将指针值转换为整数,因为您最终可能会使用一个太小而无法存储指针的整数类型。 (对于那些必要的时候,C 标准提供了 intptr_t
和 uintptr_t
。)在这种情况下,你没有问,所以编译器想确保你真的是想问将指针的地址推送到 char
.
注意有关使用比必要的更小的整数的部分。这就是为什么您的 g_signal_connect()
行会打印出它所做的警告:char
不够大,无法存储指针,因此将 char
值视为指针必然会产生非常糟糕的结果。
这就是我要找的代码。
回调相关代码
char *on = 'n';
button = gtk_button_new_with_label ("Led On");
g_signal_connect (button, "clicked", G_CALLBACK (right_y), on);
用户功能的代码。
static void
right_y (GtkButton *button, gpointer on)
{
int led_on = on;
right(led_on);
}
以及来自函数 right()
的相关片段
void right(char state) {
buf[0] = state;
int bytes_written = 0;
bytes_written = write(s, buf, strlen(buf));
}
第char *on = 'n';
行给出了警告
initialization makes pointer from integer without a cast [-Wint-conversion]
我认为这没问题,因为虽然可能有更好的方法来初始化指针,但指针才是我们想要的。
行 int led_on = on;
给出警告
initialization makes integer from pointer without a cast [-Wint-conversion]
同样可能有更好的方法,但目的是传递变量而不是指针。我试了几次都没有失败,所以我接受了。
如何从 gpointer 获取变量以便使用它。
void
right_y (GtkButton *button, gpointer on)
{
right(on);
}
这里是回调部分 带有 char on = "y"; 的行给出警告:初始化从指针生成整数而不进行强制转换 [-Wint-conversion]
gsignal 行发出警告:从不同大小的整数转换为指针 [-Wint-to-pointer-cast]
char on = "y";
button = gtk_button_new_with_label ("Led On");
g_signal_connect (button, "clicked", G_CALLBACK (right_y), (gpointer) on);
我尝试了几种不同的方法,但仍然无法理解。
谢谢。
char on = "y";
声明 on
持有 一个 char
。字符串不止一个 char
,因此您需要将它们存储为指向 char
或 char
数组的指针。
问题是您希望能够用 on
做什么决定了要使用的正确类型。但我想鉴于 post 中错误的性质,您已经知道这一点并且被 gpointer
.
gpointer
基本上就是
typedef void *gpoiner;
这就是为什么您不需要用 gpointer
指定 *
的原因。不要让这愚弄你;当您将其他指针类型与 gpointer
一起使用时,您仍然需要对其他指针类型使用 *
!
还有g_signal_connect()
行是错误的; gpointer on
没有意义。
如果您仍然不明白我在说什么,请告诉我。
好的,那为什么
char on = "y";
吐出消息
warning: initialization makes integer from pointer without a cast [-Wint-conversion]
?
"y"
是一个指针。它的计算结果为 const char *
类型的表达式。该指针可能驻留在可执行文件的代码部分,无法对其进行修改(因此 const
)。
char
是整数,不是指针。除非您明确要求,否则您通常不应该能够将指针值转换为整数,因为您最终可能会使用一个太小而无法存储指针的整数类型。 (对于那些必要的时候,C 标准提供了 intptr_t
和 uintptr_t
。)在这种情况下,你没有问,所以编译器想确保你真的是想问将指针的地址推送到 char
.
注意有关使用比必要的更小的整数的部分。这就是为什么您的 g_signal_connect()
行会打印出它所做的警告:char
不够大,无法存储指针,因此将 char
值视为指针必然会产生非常糟糕的结果。
这就是我要找的代码。
回调相关代码
char *on = 'n';
button = gtk_button_new_with_label ("Led On");
g_signal_connect (button, "clicked", G_CALLBACK (right_y), on);
用户功能的代码。
static void
right_y (GtkButton *button, gpointer on)
{
int led_on = on;
right(led_on);
}
以及来自函数 right()
的相关片段void right(char state) {
buf[0] = state;
int bytes_written = 0;
bytes_written = write(s, buf, strlen(buf));
}
第char *on = 'n';
行给出了警告
initialization makes pointer from integer without a cast [-Wint-conversion]
我认为这没问题,因为虽然可能有更好的方法来初始化指针,但指针才是我们想要的。
行 int led_on = on;
给出警告
initialization makes integer from pointer without a cast [-Wint-conversion]
同样可能有更好的方法,但目的是传递变量而不是指针。我试了几次都没有失败,所以我接受了。