我下面的代碼和它的一小部分一點也沒有意義,因爲它超出了我的知識有目前,我想知道,如果有人可以清楚這個小問題了,我宏觀語法引起的誤差
stack.h
#ifndef _STACK_H
#define _STACK_H
#include "lis1.h"
typedef List Stack ;
#define stack_init list_init
#define stack_destroy list_destroy
#define stack_size(stack) (stack)->size
#define stack_is_empty(stack) ((stack)->size==0)?1:0
int stack_push(Stack*stack,void*data);
int stack_pop(Stack*stack,void**data);
#endif
請注意#define stack_is_empty(stack) ((stack)->size==0)?1:0
仔細 並在下面的程序編譯,
#include<stdio.h>
#include"stack.h"
static char ams[5] = { 'h', 'e', 'l', 'l', 'o' };
void* data;
Stack stack;
char*ss;
void debug(int a)
{
printf(" debug %d \n", a);
}
int main()
{
stack_init(&stack, NULL);
debug(1);
int i;
for (i = 0; i < 5; i++)
{
stack_push(&stack, (void*) (&ams[i]));
};
debug(2);
while (printf("checker\n") && stack_is_empty(&stack) != 1)
{
printf("->");
printf("[%d ", stack_size(&stack));
stack_pop(&stack, &data);
printf("%c]", *((char*) data));
printf("--\n");
};
return 0;
}
我得到這個
debug 1 debug 2 checker
->[5 o]-- checker
->[4 l]-- checker
->[3 l]-- checker
->[2 e]-- checker
->[1 h]-- checker
segmentation fault
,但如果我改變#define stack_is_empty(stack) ((stack)->size==0)?1:0
到#define stack_is_empty(stack) (((stack)->size==0)?1:0)
,沒有賽格故障
我的查詢
我的問題,爲什麼做了工作方案前完全正常直到有條件的一個'1'..我似乎明白爲什麼後者的作品。