1. 对结构体的赋值:
ClutterColor stage_color;
stage_color = {0xff, 0xff, 0x0, 0xff};
报告错误为: error: expected expression before '{' token
总结: 结构体要么在初始化时赋值,要么需要对其各项分别赋值。
如上列中:stage_color.red = 0xff, stage_color.green = 0xff, stage_color.blue = 0x0, stage_color.alpha = 0xff;
2. 误以为gpointer 只是基本类型(如int),声明函数void on_foreach_show(gint data, gpointer *user_data) {...};
总结: gpointer 为 (void *).
3. 对(void *) 类型的指针解引用时,要先强制转化为指针的原本类型,否则无法解引用.
报错为:
main.c:82: warning: dereferencing 'void *' pointer
main.c:82: error: void value not ignored as it ought to be
4. g_signal_connect 带进的参数无效;
比如:g_signal_connect (row_actor, "key-focus-out", G_CALLBACK (row_actor_focus_out_event), pItem);
回调函数的声明为:
static gboolean row_actor_event_dispose (ClutterActor *row_text_actor,
ClutterEvent *event,
SubItem *pItem)
{...}
总结:在g_signal_new时,指定的函数指针除了instance外只带了一个参数(clutter-actor.h文件),如下:
void (* key_focus_out)(ClutterActor *actor);
所以回调函数应该声明为如下即可:
static gboolean row_actor_event_dispose (ClutterActor *row_text_actor,
SubItem *pItem)
5. xargs: build and execute command lines from standard input
ls | xargs grep xxx <=> grep xxx `ls` <=> 在ls的列表中找xxx字符串
ls | grep xxx <=> 在ls的列表中找xxx文件
6. 如何在命令行中使用有空格的文件名和路径?
方法1:g_sprintf(play_info, "find /"%s/" -print0 -exec /bin/media_player -src {} //;", pItem->focus_in_row_file_name);
system(play_info); /* 小技巧 */
方法2:g_sprintf(play_info, "/bin/media_player -src /"%s/"", pItem->focus_in_row_file_name);
system(play_info); /* 使用""包括路径的整体 */
7. EXIT_FAILURE 和 EXIT_SUCCESS 在 stdlib.h 中定义.
8. 头文件循环包含问题的解决:
a. 使用ifndef/define/endif等结构进行预处理, 如下:
#ifndef __CLUTTER_ACTOR_H__
#define __CLUTTER_ACTOR_H__
#include <clutter-actor.h>
#endif
b. 设置一个统一的头文件;
c. 将可能导致循环包含的头文件写到*.c文件中.