一段离奇代码,大家快来看呀 救人一命生造7级浮屠
请高人指点一下,语法的结构,尤其是"\"的意思,"int global_state"和"struct jpeg_error_mgr * err"的区别在什么地方?
包夜等待!!!!!!!
#define jpeg_common_fields \
struct jpeg_error_mgr * err; /* Error handler module */\
struct jpeg_memory_mgr * mem; /* Memory manager module */\
struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
void * client_data; /* Available for use by application */\
boolean is_decompressor; /* So common code can tell which is which */\
int global_state /* For checking call sequence validity */
/* Routines that are to be used by both halves of the library are declared
* to receive a pointer to this structure. There are no actual instances of
* jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
*/
struct jpeg_common_struct {
jpeg_common_fields; /* Fields common to both master struct types */
/* Additional fields follow in an actual jpeg_compress_struct or
* jpeg_decompress_struct. All three structs must agree on these
* initial fields! (This would be a lot cleaner in C++.)
*/
};
问题点数:20、回复次数:4Top
1 楼DelphiNew(沙鼠)回复于 2006-05-02 21:54:40 得分 0
这段代码的意思并不复杂。。
如果你觉得难明白,最好把所有的/* xxx */ 都去掉。。。
'\'号处于行尾代表续行,也就是说编译器会认为这一行没有结束。。。
和#define配合可以定义很长的语句序列。
jpeg_common_struct中用到了jpeg_common_fields;估计代码的另几个结构体
也要用到jpeg_common_fields;这样写只是省力罢了。
用#define来减少结构体成员声明的重复。。。
注释中有说到:(This would be a lot cleaner in C++.)。。。是因为:
C++中有继承,所以就用不着这个jpeg_common_fields的宏了。。Top
2 楼wangyun850607()回复于 2006-05-02 22:18:03 得分 0
大哥请说的再明白一点,int global_state这样写合法吗 ,结构里面没有那个jpeg_common_fields
struct jpeg_error_mgr {
JMETHOD(void, error_exit, (j_common_ptr cinfo));
JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
JMETHOD(void, output_message, (j_common_ptr cinfo));
JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
#define JMSG_LENGTH_MAX 200
JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
int msg_code;
#define JMSG_STR_PARM_MAX 80
union {
int i[8];
char s[JMSG_STR_PARM_MAX];
}Top
3 楼DelphiNew(沙鼠)回复于 2006-05-03 22:09:38 得分 0
回楼上的:
<<int global_state这样写合法吗?
当然不合法,不过后面在宏调用时加了分号了。于是就合法了。。当然。写两个分号也无所谓
struct jpeg_common_struct {
jpeg_common_fields;/*这里不就是那个jpeg_common_fields么,还有,看到后面有个分号了吧*/
/* Additional fields follow in an actual jpeg_compress_struct or
* jpeg_decompress_struct. All three structs must agree on these
* initial fields! (This would be a lot cleaner in C++.)
*/
};Top
4 楼killerll()回复于 2006-05-03 22:12:29 得分 0
问问大家
为什么
int deQueue(PNODE *tail,int *e)
{ PNODE p,q;
if((*tail)->next == *tail)return –1;
p = (*tail)->next;
q = p->next;
*e = q->value;
___(4)___ = q->next;
if(*tail = q) ___(5)___;
free(q);
return 0;
}
这段代码表示队列的出列啊?
麻烦解释一下。看了半天没有懂Top




