从C ++调用C API缺少printf语句的输出

时间:2015-01-02 12:23:06

标签: c++ c linux

让我们通过示例代码。

ctest1.c

#include<stdio.h>

void ctest1(int *i)
{
   printf("This is from ctest1\n"); // output of this is missing
   *i=15;
   return;
}

ctest2.c

#include<stdio.h>

void ctest2(int *i)
{
   printf("This is from ctest2\n"); // output of this is missing
   *i=100;
   return;
}

ctest.h

void ctest1(int *);
void ctest2(int *);

现在让我们从那个

创建c库
gcc -Wall -c ctest1.c ctest2.c
ar -cvq libctest.a ctest1.o ctest2.o

现在让我们制作基于cpp的文件,它将使用这个c apis prog.cpp

#include <iostream>
extern "C" {
#include"ctest.h"
}
using namespace std;

int main()
{
  int x;
  ctest1(&x);
  std::cout << "Value is" << x;
  ctest2(&x);
  std::cout << "Value is" << x;

}

现在让我们用C库编译这个c ++程序

g++ prog.cpp libctest.a

现在像

一样运行
./a.out

输出是: 值为5Value为100

但这里的价值是正确的。这意味着他们正确地调用了c apis。但缺少那些printf语句的输出。

我缺少什么?

1 个答案:

答案 0 :(得分:4)

它适用于我(OSX 10.8,LLVM 6.0)。

您可能通过添加printfs修改了代码,忘记重新生成库。您应该使用r(替换选项)代替q

但是在混合输入/输出层时要小心,最好要求两者同步。调用ios_base :: sync_with_stdio(1)以使它们一起工作,请参阅http://www.cplusplus.com/reference/ios/ios_base/sync_with_stdio/