Перегрузка функции в си с разным количеством аргументов

Рейтинг: -1Ответов: 1Опубликовано: 13.02.2023

Нужно реализовать на си инициализацию списка с/без данных для первого блока. Нужна одна функция для инициализации, но или с одним int параметром, или без параметров вовсе. Хотелось бы получить что-то вроде этого, но код не работает:

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

typedef struct node {
    int data;
    struct node *next;
} node;

node *initializewithdata(int data) {
    node *head = (node*)malloc(sizeof(node));
    head->next = NULL;
    head->data = data;
    return head;
}

node *initializewithoutdata() {
    node *head = (node*)malloc(sizeof(node));
    head->next = NULL;
    return head;
}

#define initializelist(X) _Generic((X), int: initializewithdata, default: initializewithoutdata)(X)
#define initializelist() initializewithoutdata()

int main() {
    node *head = initializelist();
    return 0;
}

Заранее спасибо!

P.S. Да, я знаю, что для перегрузки стоило бы использовать C++. Мне нужен именно си

Ответы

▲ 1

В си так делать нельзя - в языке си перегрузки в данном виде нет, можно вывернуться через дженерик макросы или дефайны, может быть, но в данном виде в Си перегрузки нет