Skip to content

Instantly share code, notes, and snippets.

@barosl
Created July 26, 2015 07:26
Show Gist options
  • Save barosl/e0af4a92b2b8cabd05a7 to your computer and use it in GitHub Desktop.
Save barosl/e0af4a92b2b8cabd05a7 to your computer and use it in GitHub Desktop.
Function overloading in C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int addi(int a, int b) {
return a + b;
}
char *adds(char *a, char *b) {
char *res = malloc(strlen(a) + strlen(b) + 1);
strcpy(res, a);
strcat(res, b);
return res;
}
#define add(a, b) _Generic(a, int: addi, char*: adds)(a, b)
int main(void) {
int a = 1, b = 2;
printf("%d\n", add(a, b)); // 3
char *c = "hello ", *d = "world";
printf("%s\n", add(c, d)); // hello world
return 0;
}
@lrocha3
Copy link

lrocha3 commented Feb 16, 2017

There is a memory leak. You allocate with malloc but you never free the allocated memory. You should fix that.

@etale-cohomology
Copy link

Who says C can't be high-level and beautiful? <3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment