我很难编译这个C代码。
基本上会发生什么:
EXC_BAD_ACCESS
启用GNU99和-fnested-functions标志
我不想改变主要功能只是其他东西
这段代码让我疯了整整一个下午,所以我会非常感激一点帮助。 三江源
#include <stdlib.h>
#include "string.h"
#include "stdio.h"
typedef struct
{
int numerator;
int denominator;
void (*print)(); // prints on screen "numerator/denominator"
float (*convertToNum)(); //returns value of numerator/denominator
void (*setNumerator)(int n);
void (*setDenominator)(int d);
} Fraction;
Fraction* allocFraction(Fraction* fraction); //creates an uninitialized fraction
void deleteFraction(Fraction *fraction);
Fraction* allocFraction(Fraction* fraction)
{
void print()
{
int a= 10;
printf("%i/%i", (*fraction).numerator, (*fraction).denominator);
a--;
}
float convertToNum()
{
return (float)(*fraction).numerator/(float)(*fraction).denominator;
}
void setNumerator (int n)
{
(*fraction).numerator= n;
}
void setDenominator (int d)
{
(*fraction).denominator= d;
}
if(fraction== NULL)
fraction= (Fraction*) malloc(sizeof(Fraction));
if(fraction)
{
(*fraction).convertToNum= convertToNum;
(*fraction).print= print;
(*fraction).setNumerator= setNumerator;
(*fraction).setDenominator= setDenominator;
}
return fraction;
}
void deleteFraction(Fraction *fraction)
{
free(fraction);
}
int main (int argc, const char * argv[])
{
Fraction *fraction= allocFraction(fraction);
(*fraction).setNumerator(4);
(*fraction).setDenominator(7);
(*fraction).print(); //EXC_BAD_ACCESS on debug. Illegal instruction in Terminal
printf("%f", (*fraction).convertToNum());
(*fraction).print();
deleteFraction(fraction);
return 0;
}
答案 0 :(得分:3)
你不能像编写Javascript那样编写C语言。
具体来说,print()
似乎是allocFraction()
内的嵌套函数(它本身不是标准C而是gcc扩展名)。您不能通过函数指针调用嵌套函数,该函数指针位于定义范围之外。即使您没有从嵌套范围访问外部作用域中的任何内容,也是如此。
你的代码似乎是在C中尝试进行面向对象的编程。你考虑过C ++吗?