Заменить функцию или определить по самому тексту

Как я могу заменить все вхождения

check_free_set_to_null(&pointer)

by

if (pointer)
{
    free(pointer)
    printf(pointer have been freed)
}
else
{
    printf(pointer couldnt had been freed)
    return (1)
}

возможно, используя какой-то

{1} = check_free_set_to_null(КОНТЕНТ)

  if ({1})
    {
        free({1})
        printf({1} have been freed)
    }
    else
    {
        printf({1} couldnt had been freed)
        return (1)
    }

как я мог это сделать? (обратите внимание, что это не совсем то, что нужно заменить, это просто пример). Я не ищу, чтобы компилятор интерпретировал его как несколько строк, я ищу изменение файла.


person user6714088    schedule 02.07.2017    source источник
comment
Примечание: проверка if (pointer) перед вызовом free(pointer) не требуется. pointer = NULL; free(pointer); в порядке.   -  person chux - Reinstate Monica    schedule 02.07.2017
comment
@chux сначала устанавливает значение null, а затем вызывает free?   -  person tilz0R    schedule 02.07.2017
comment
@ tilz0R Просто короткий демо-код. free(NULL); в порядке. Потребность ОП в if (pointer) перед free() сомнительна.   -  person chux - Reinstate Monica    schedule 02.07.2017
comment
Вызов free на NULL ptr в порядке, как указал @chux. free ничего не делает, если указатель равен NULL. больше на man 3 free   -  person dlmeetei    schedule 03.07.2017


Ответы (1)


Вы можете использовать макросы для этой работы.

#define check_free_set_to_null(pointer) if (pointer) { \
    free(pointer)\
    printf(pointer have been freed)\
} else {\
    printf(pointer couldnt had been freed)\
    return (1)\
}
person tilz0R    schedule 02.07.2017
comment
Он должен быть встроен в файл. Как я могу только активировать этот макрос и создать файл c? - person user6714088; 02.07.2017
comment
@user6714088 user6714088 при таком подходе компилятор вставит его в строку. - person tilz0R; 02.07.2017
comment
Он должен быть встроен в новый или тот же файл для дальнейшего редактирования без добавления других встроенных определений, а затем - person user6714088; 02.07.2017
comment
Как указано в заголовке, мне нужно поместить текст определения или функции в строку. - person user6714088; 02.07.2017
comment
Нет, таким путем это не достижимо. Вы должны открыть свой файл и выполнить, например, preg замену в самом файле. - person tilz0R; 02.07.2017