-2
#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';

したがって、エラーがスローされます。答えを教えてください。

4

2 に答える 2

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;
}
于 2012-08-13T04:25:36.440 に答える
0
#define int long

これは非常に悪い考えです。これをしないでください。

Linux環境でエラーが発生します

いいえ、そうではありません。gcc で問題なくコンパイルおよび実行されます。

マクロで int を long に変更したので

これは非常に悪い考えです。これをしないでください。

あなたの質問に対する答えは次のとおりです。マクロを使用して C 言語を再発明しようとすると、悪いことが起こり、自分で解決する必要があります。

于 2012-08-13T06:15:01.573 に答える