我正在使用带有“假功能框架”(fff)的天花板。

我为debug_printf函数声明了一个自定义伪造品。

我的debug.h

#ifndef DEBUG_H
#define DEBUG_H

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

#endif // DEBUG_H


我的h

#ifndef SOME_H
#define SOME_H

void f(void);

#endif // SOME_H


我的一些

#include "some.h"

#include "debug.h"

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


我的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;
                                   ^


我应该改变什么以获得正确的指针类型。

最佳答案

在一起。

首先:

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的示例将不起作用。
使用ElectronVector的fff-plugin时的解决方案。

fff.h已过时,应进行更新。
在您的项目文件夹中:

cd vendor/ceedling/plugins/fake_function_framework/vendor/fff
git fetch
git checkout master

关于c - 可变参数函数的分配因指针类型不兼容而失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56968954/

10-11 19:41