Hatefiend Hatefiend - 3 months ago 15
C Question

Define new function, array, struct etc inside of parameter of function call

If you had a function which took the following:

void foo(char **arr);


How can you do the following:

void foo(char* x[] = { "hello", "my", "friend" });


If this confuses you, in Java we do this by the following:

public void foo(String[] x);

foo(new String[] { "hello", "my", "friend" });


Currently, I do the following in C which I hate because it looks really ugly:

char* myArr[] =
{
"hello", "my", "friend"
};

foo(myArr);

Answer

Java and C are different languages with different idioms.

If it were me, I'd refrain from trying [too hard] to coerce C into "Java-like". Embrace each language on its own merits.

For your first example, the "ugly" one, you could use a CPP [C preprocessor] macro--a concept that does not exist in Java:

#define FOO(_av...) \
    do { \
        char *myArr[] = { _av, NULL }; \
        foo(myArr); \
    } while (0)

FOO("hello", "my", "friend");

But, this would probably be regarded by many as "too cute". Better to create a table of some sort.

Whenever Java does a new it is doing a heap allocation [which is slow]. That's partly because everything has to be "on the heap", more or less.

C can do this with malloc, but a good C programmer will try to avoid unnecessary heap allocations because it has globals, statics, and function scoped variables.