我下面的代码和一小部分没有意义,因为它超出了我目前的知识范围,我想知道是否有人可以为我解决这个小问题
堆栈.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”..我似乎理解为什么后者有效。