在C中通过宏转换数据类型

时间:2012-08-13 04:23:10

标签: c types macros

#include <stdio.h>
#include <ctype.h>
#define int long
int main ()
{
  char c;
  int i=0;
  char str[]="Example sentence to test isspace\n";
  while (str[i])
  {
    c=str[i];
    if (isspace(c)) c='\n';
    putchar (c);
    i++;
  }
  return 0;
}

它在linux环境中出错,因为: isspace将扩展为

if (((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISspace)) c='\n';

当我通过宏将int更改为long时,它将变为

if (((*__ctype_b_loc ())[(long) ((c))] & (unsigned short long) _ISspace)) c='\n';

因此它会抛出错误,请给我答案。

2 个答案:

答案 0 :(得分:1)

简单回答:不要使用宏将int更改为long。

如果你真的必须,你可以做这样的事情:

#include <stdio.h>
#include <ctype.h>
#define int long
int main ()
{
  char c;
  int i=0;
  char str[]="Example sentence to test isspace\n";
  while (str[i])
  {
    c=str[i];
#define int int
    if (isspace(c)) c='\n';
#define int long
    putchar (c);
    i++;
  }
  return 0;
}

答案 1 :(得分:0)

#define int long

这是一个非常糟糕的主意。不要这样做。

  

它在linux环境中出错

不,不。用gcc编译并执行就好了。

  

当我通过宏

将int更改为long

这是一个非常糟糕的主意。不要这样做。

你的问题的答案是:如果你试图用宏重新发明C语言,那么就会发生不好的事情,你可以自己解决它们。