#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';
因此它会抛出错误,请给我答案。
答案 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语言,那么就会发生不好的事情,你可以自己解决它们。