Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 671269
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T00:21:17+00:00 2026-05-14T00:21:17+00:00

Is there a simple way?

  • 0

Is there a simple way?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T00:21:18+00:00Added an answer on May 14, 2026 at 12:21 am

    That’s a pretty broad question. Fundamentally a closure is an instruction pointer along with some stored context that’s required to execute the instructions in the right way. You can certainly throw something like this together in C using structs and function pointers.

    Let’s say you express a closure that takes two ints and returns void as a struct:

    typedef struct VoidClosureIntInt {
      void (*fn)(int, int);
      int first;
      int second;
    } VoidClosureIntInt;
    

    and suppose you have a function:

    void Foo(int x, int y);
    

    Now, to create a closure that will invoke Foo(23, 42), you would do:

    VoidClosureIntInt closure = {&Foo, 23, 42};
    

    And then to later execute that closure, you would do:

    (*closure.fn)(closure.first, closure.second);
    

    One more wrinkle: most of the time when you’re using closures, you want to pass context around beyond the lifetime of the code block in which you create the closure. (Example: you’re passing the closure into a function that does some asynchronous I/O and will eventually call your closure when that I/O is finished). In such cases, you must be sure to allocate your closure on the heap, and to delete your closure when you’re finished with it. (See complete example at the bottom).

    One final note: there’s obviously a lot of machinery here, and it’s just for one kind of closure (a function that takes two integer args and returns void). When I’ve seen this done in C it’s often been done by a code generator that creates machinery for many different kinds of closures. You can also reduce the amount of boilerplate by only supporting closures that take some (fixed number of) void* arguments, and then typecasting within the functions you’re using to implement those closures.

    If you’re in C++, you can take advantage of language features to do this much more generically and with much less typing. See Boost.Function for an example.

    Full example:

    #include <stdio.h>
    #include <stdlib.h>
    
    // Closure support.
    
    typedef struct VoidClosureIntInt {
      void (*fn)(int, int);
      int first;
      int second;
    } VoidClosureIntInt;
    
    // The returned closure should be run via RunAndDeleteClosure().
    VoidClosureIntInt* NewClosure(void (*fn)(int, int), int first, int second) {
      VoidClosureIntInt* closure = malloc(sizeof(*closure));
      closure->fn = fn;
      closure->first = first;
      closure->second = second;
      return closure;
    }
    
    void RunAndDeleteClosure(VoidClosureIntInt* closure) {
      (*closure->fn)(closure->first, closure->second);
      free(closure);
    }
    
    
    // Example use.
    
    void Foo(int x, int y) {
      printf("x=%d\ny=%d\n", x, y);
    }
    
    // We take memory ownership of closure.
    void SomeAsynchronousFunction(VoidClosureIntInt* closure) {
      RunAndDeleteClosure(closure);
    }
    
    int main(int argc, char** argv) {
      VoidClosureIntInt* closure = NewClosure(&Foo, 23, 42);
      SomeAsynchronousFunction(closure);
      return 0;
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 441k
  • Answers 441k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer Consider using your complex condition in the expression for a… May 15, 2026 at 5:28 pm
  • Editorial Team
    Editorial Team added an answer When you initialize localScroll, be sure to pass in duration:… May 15, 2026 at 5:28 pm
  • Editorial Team
    Editorial Team added an answer You can do absolute positioning with a null layout. You… May 15, 2026 at 5:28 pm

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.