PDA

View Full Version : سوال: تعریف تابع درون ساختار در زبان سی



yassersajjadi
سه شنبه 25 تیر 1392, 02:57 صبح
سلام

میخواستم بدونم چطوری میشه یه تابع رو توی زبان سی درون یه ساختار تعریف کرد البته مستقیما

راه غیر مستقیمش به صورت زیره ولی من مستقیم میخوام این کارو بکنم





typedef struct _str
{
void(*Init)();
}str_t;

str_t newStr =(str_t)
{
.Init = تابع مورد نظر
}

مصطفی ساتکی
چهارشنبه 26 تیر 1392, 00:17 صبح
سلام

میخواستم بدونم چطوری میشه یه تابع رو توی زبان سی درون یه ساختار تعریف کرد البته مستقیما

راه غیر مستقیمش به صورت زیره ولی من مستقیم میخوام این کارو بکنم





typedef struct _str
{
void(*Init)();
}str_t;

str_t newStr =(str_t)
{
.Init = تابع مورد نظر
}



شما از روش اشاره گر به تابع یا function pointer استفاده کردید که البته شکل صحیحش به این صورت هستش.که مزیت اینه که در زمان اجرا می تونید تابع را تغییر بدید.

typedef void(*FUNC)();
typedef struct str_t
{
FUNC func1;
}str_t;

void print()
{
printf("hello");
}
int main()
{
str_t new_str ;
new_str.func1 = print;
new_str.func1();
}


و حالت عادی هم مثل کلاس می تونید توی struct تابع تعریف کنید.توی struct حتی constructor و destructor هم دارید.

typedef struct str_t
{
void print()
{
printf("hello");
}
}str_t;

int main()
{
str_t new_str ;
new_str.print();
}

مصطفی ساتکی
چهارشنبه 26 تیر 1392, 00:18 صبح
سلام

میخواستم بدونم چطوری میشه یه تابع رو توی زبان سی درون یه ساختار تعریف کرد البته مستقیما

راه غیر مستقیمش به صورت زیره ولی من مستقیم میخوام این کارو بکنم





typedef struct _str
{
void(*Init)();
}str_t;

str_t newStr =(str_t)
{
.Init = تابع مورد نظر
}



شما از روش اشاره گر به تابع یا function pointer استفاده کردید که البته شکل صحیحش به این صورت هستش.که مزیتش اینه که در زمان اجرا می تونید تابع را تغییر بدید.

typedef void(*FUNC)();
typedef struct str_t
{
FUNC func1;
}str_t;

void print()
{
printf("hello");
}
int main()
{
str_t new_str ;
new_str.func1 = print;
new_str.func1();
}


و حالت عادی هم مثل کلاس می تونید توی struct تابع تعریف کنید.توی struct حتی constructor و destructor هم می تونید تعریف کنید .

typedef struct str_t
{
void print()
{
printf("hello");
}
}str_t;

int main()
{
str_t new_str ;
new_str.print();
}

yassersajjadi
چهارشنبه 26 تیر 1392, 02:41 صبح
منظورم شیوه دوم بود که امتحانش کرده بودم ولی gcc خطا میده


[compiling] arch/i386/context.c ...
arch/i386/context.c:36:2: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token

یعنی ارور در خط مثلا 4 کد پست بالایی شما قبل از {