如何在C ++中定义常量?

时间:2014-09-05 10:41:59

标签: c++ linux gcc mingw

我通过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。我希望适用于这两个平台。

2 个答案:

答案 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>

实现