我通过Mingw在Windows上编写了一个linux程序。但是,转换并不完美。 例如,在Windows上,输出是这样的(我得到的是' zu'而不是实数):
Approximated minimal memory consumption:
Sequence : zuM
Buffer : 1 X zuM = zuM
Table : 1 X zuM = zuM
Miscellaneous : zuM
Total : zuM
事实证明,Mingw不支持%zu,但它提供了一种解决方法。他们在web site说:
由于您使用的是Microsoft的实现,因此无法使用。 直接使用mingw_printf或者之前将USE_MINGW_ANSI_STDIO定义为1 包括stdio.h。
所以,我在我的程序中进行了搜索,我发现cdhit-common.h是唯一一个有#include行的文件。所以,我在该行上方定义了USE_MINGW_ANSI_STDIO并编译:
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdlib>
#define USE_MINGW_ANSI_STDIO 1
#include<stdio.h>
...
它编译但程序仍然输出&#39; zu&#39;而不是数字。我做的不错吗?为什么没有用?
注意:使用mingw时,使用USE_MINGW_ANSI_STDIO的解决方案适用于mingw64。我希望适用于这两个平台。
答案 0 :(得分:5)
我现在设法谷歌的宏是:__USE_MINGW_ANSI_STDIO
。试试吧。
答案 1 :(得分:2)
您正在设置预处理器标志。这意味着当编译器读取<stdio.h>
时,它将USE_MINGW_ANSI_STDIO
设置为1.这可能会在编译器指令#if
或#ifdef
中使用。
通常最好将这些标志放入编译标志中,例如
-DUSE_MINGW_ANSI_STDIO=1
而不是代码。
(注意:它似乎可能是-D__USE_MINGW_ANSI_STDIO=1
)
如果您确实将其放入代码中,请执行此操作
其中一个C ++流标头可能使用<stdio.h>