pointers - C, what does this line do? -


i saw line of code topic @ codegolf.

struct { int (*log)(const char *,...); } console = { printf }; 

this original post https://codegolf.stackexchange.com/questions/24623/write-program-in-your-favorite-language-in-another-language although know c/c++, cannot understand line. thought create synonyms, use typefs , (console={printf}). also, dont understand struct @ all. why struct , going on inside... casting of pointers? ,.... see inside?

so, let's work outside in:

struct { t m; } console = { }; 

you're defining anonymous struct type single member m of type t, using type declare variable named console , initializing initializer { }.

so t, m, , i?

the member declaration

int (*log)(const char *, ...); 

breaks down as

      log                         -- log     (*log)                        -- pointer     (*log)(                 )     -- function     (*log)(const char *, ...)     -- taking fixed parameter of type                                           const char *, followed variable                                          number of parameters int (*log)(const char *, ...);    -- returning int 

so, member m named log, , type t int (*)(const char *, ...).

the initializer expression is

{ printf } 

the prototype printf

int printf(const char *, ...); 

except when operand of sizeof or unary & operators, function designator of type "function returning t" converted expression of type "pointer function returning t". thus, type of expression printf within initializer is

int (*)(const char *, ...); 

look familiar? that's same type of log member.

tl;dr version

you're creating struct type containing single member named log, used point function printf. used this:

struct { int (*log)(const char *, ...); } console = { printf }; ... console.log("%s\n", "this test"); 

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -