我在C中有一个崩溃我的代码的功能,我很难弄清楚发生了什么。我有一个看起来像这样的函数:
#define cond int
void Enqueue(cond (*cond_func)());
cond read() {
return IsEmpty(some_global); // Returns a 1 or a 0 as an int
}
Enqueue(&read);
然而,在运行上述内容时,只要调用Enqueue就会发生段错误。它甚至不执行函数内部的任何内容。我运行了gdb,它只是在Enqueue被调用时显示它正在死亡 - 它内部没有处理任何语句。知道发生了什么事吗?任何帮助将不胜感激。
答案 0 :(得分:0)
#define cond int
原意是:
typedef int cond;
虽然为函数指针定义别名可能在这里更合理,例如:
typedef int (*FncPtr)(void);
int read() {
printf("reading...");
}
void foo(FncPtr f) {
(*f)();
}
int main() {
foo(read);
return 0;
}
答案 1 :(得分:0)
您能否提供有关代码的更多信息,因为根据我的解释,代码工作正常。我试过这个 -
#define cond int
void Enqueue(cond (*cond_func)());
cond read()
{
int some_global=1;
return IsEmpty(some_global); // Returns a 1 or a 0 as an int
}
int IsEmpty()
{
return 1;
}
void Enqueue(cond (*cond_func)())
{
printf("Perfect");
return 0;
}
int main()
{
Enqueue(&read);
return 0;
}
它工作正常。
答案 2 :(得分:0)
这很好用:
#include <stdio.h>
#include <stdbool.h>
typedef bool cond;
void Enqueue(cond (*cond_func)(void)) {
printf("In Enqueue()...\n");
cond status = cond_func();
printf("In Enqueue, 'status' is %s\n", status ? "true" : "false");
}
bool IsEmpty(const int n) {
return true;
}
cond my_cond_func(void) {
printf("In my_cond_func()...\n");
return IsEmpty(1);
}
int main(void) {
Enqueue(my_cond_func);
return 0;
}
您的问题可能来自其他地方,例如您未提供的Enqueue()
的定义,或您的函数被称为read()
的事实,并且与更常见的函数冲突那个名字。