Сбой при назначении функции с несовместимым типом указателя - PullRequest
0 голосов
/ 10 июля 2019

Я использую ceedling с 'fake funcion framework' ( fff ).

Я объявляю пользовательскую подделку для моей функции debug_printf.

Моя отладка.h

#ifndef DEBUG_H
#define DEBUG_H

void debug_printf(const char*, ...);

#endif // DEBUG_H

My some.h

#ifndef SOME_H
#define SOME_H

void f(void);

#endif // SOME_H

My some.c

#include "some.h"

#include "debug.h"

void f()
{
  debug_printf("test");
}

My test_some.c

#include "fff.h"

#include "some.h"

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

DEFINE_FFF_GLOBALS;

FAKE_VOID_FUNC2_VARARG(debug_printf, const char*, ...);

void debug_printf_custom(const char* fmt, ...)
{
  va_list ap;

  va_start(ap, fmt);
  vprintf(fmt, ap);
  va_end(ap);
}

void test_f(void)
{
  debug_printf_fake.custom_fake = debug_printf_custom;
  f();
}

int main(void)
{
  test_f();
  return 0;
}

КогдаЯ пытаюсь запустить тест, у меня есть сообщение:

> gcc test_some.c some.c -o test

test_some.c: In function ‘test_f’:
test_some.c:23:35: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
     debug_printf_fake.custom_fake = debug_printf_custom;
                                   ^

Что я должен изменить, чтобы получить правильный тип указателя.

1 Ответ

0 голосов
/ 10 июля 2019

Все вместе.

Прежде всего:

void debug_printf_custom(const char* fmt, ...)
{
  va_list ap;

  va_start(ap, fmt);
  vprintf(fmt, ap);
  va_end(ap);
}

должно быть

void debug_printf_custom(const char* fmt, va_list ap)
{
  vprintf(fmt, ap);
}

как указано @ ianabbott.

К сожалению, минимальный пример будет работать, но не тот, что с Ceedling. Решение при использовании fff-plugin от ElectronVector.

Файл fff.h устарел и должен быть обновлен. В папке вашего проекта:

cd vendor/ceedling/plugins/fake_function_framework/vendor/fff 
git fetch
git checkout master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...