سؤال

لدي وظيفة ج تؤدي إلى مؤشر دالة كوسيطة، إنها مدمرا سأتصل به في نهاية برنامجي. هنا هو النموذج الأولي لوظيفتي:

int store_dest(void (*routine)(void *));

أريد تخزين مؤشر الوظيفة هذا في هيكل مع بعض المعلومات الأخرى. من أجل الحصول على بنية لطيفة، أريد الحصول على TYPEDEF إلى مؤشر الوظيفة هذا. هنا هو بلدي typedef:

typedef void (*my_destructor)(void *);

وهنا هيكلي:

typedef struct my_struct{
  my_destructor dest;
  other_info ...
} my_struct;

أثناء خطوة التهيئة، أريد تعيين حقل "DIST" إلى وظيفة مني، هنا هو النموذج الأولي لهذه الوظيفة:

void* my_dummy_dest(void* foo);

المشكلة (في الحقيقة أنها مجرد تحذير ولكن أود قمعها) تحدث عندما أحاول ضبط حقل "DIST" الخاص بهيكلي إلى "my_dummy_dest":

my_struct.dest = &my_dummy_dest;

أحصل على "تحذير: تعيين من نوع مؤشر غير متوافق"

نفس الشيء عندما أقارنهم فقط:

if (my_struct.dest == &my_dummy_dest)

أحصل على "تحذير: مقارنة لأنواع المؤشر المميزة تفتقر إلى المصبوب"

لكنني لا أحصل على تحذير عندما أضع حقل "dest" مع روتين آخر. لا أفهم لماذا لدي تلك التحذيرات.

هل كانت مفيدة؟

المحلول

أعلن تدمير دمية الخاص بك لإرجاع الفراغ مؤشر, ، ليس باطلة. هذا الإعلان لا يتطابق مع typedef لمؤشر دعامات المدمر الخاص بك.

نصائح أخرى

يجب أن يكون typedef:

typedef void *(*my_destructor)(void *);

لأن my_dummy_test إرجاع الفراغ * بدلا من الفراغ. إذا كنت ترغب في العودة باطل *، يجب أن يكون typedef

typedef void* (*my_destructor)(void *);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top