سؤال

لدي هذا الرمز:

#include <stdio.h>

int getAns(void);
int num;

int main() 
{
    int (*current_ans)(void);
    current_ans = &getAns;
    // HERE
    printf("%d", current_ans());    

}

int getAns()
{
    return num + 3;
}

ومع ذلك، هل من الممكن أن يكون لديك شيء في // HERE بقعة يسمح للسطر التالي printf("%d", current_ans); الذي يصل إلى Getans () بطريقة دوار؟

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

المحلول

أظن أنك لا تستطيع ذلك () ضروري لإخبار المحول البرمجي أنها دعوة وظيفة. ومع ذلك، إذا كنت هل حقا تريد أن تفعل ذلك، يمكنك القيام به:

#define current_ans current_ans()

نصائح أخرى

على الرغم من أنني أتفق مع إجابة بيير، فإن

#define current_ans current_ans()

سوف تجعل الكود كثيرا غير قابل للقراءة

ماذا عن "#Define current_ans myroundaboutfnname ()"

لا ل current_ans و current_ans() هي أشياء مختلفة. بدون قوس، كلاهما current_ans و getAns هي مؤشرات وظيفة، بينما مع قوسين، فهي مكالمات وظيفة. إذا كنت تفكر في الأقواس نظرا لأن نطاق إلغاء تحديد المؤشر عن طريق تنفيذ التعليمات البرمجية، فإن ما تسأله هو علاج المؤشر ومحتويات المؤشر كواحد في نفسه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top