Обсуждение: ecpg problem : pre-processor translated hex constant to char

Поиск
Список
Период
Сортировка

ecpg problem : pre-processor translated hex constant to char

От
Raymond Fung
Дата:
Dear all,

A simple testing program :

* * * * * * * * * * * * * *  begin  * * * * * * * * * * * * * * * *

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  unsigned int   v;

  v = 0x87654321L;

  return (0);
}

* * * * * * * * * * * * * *  end  * * * * * * * * * * * * * * * *

compile with ecpg using :

  ecpg -o mytest.c -I/usr/include/pgsql mytest.pgc

produces the output C program file as follow :

* * * * * * * * * * * * * *  begin  * * * * * * * * * * * * * * * *

/* Processed by ecpg (2.8.0) */
/* These three include files are added by the preprocessor */
#include <ecpgtype.h>
#include <ecpglib.h>
#include <ecpgerrno.h>
#line 1 "test.pgc"
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  unsigned int   v;

  v = '0x87654321'L;

  return (0);
}

* * * * * * * * * * * * * * *  end  * * * * * * * * * * * * * * *

It has translated the 4 bytes constant (0x87654321) into a one byte
char constant (within the single quotes) during pre-processing. Seems
this happens only when the high bit of the constant is set (i.e. it
won't add the quotes if the constant is 0x12345678).

Also, I noticed that the line number reported during the preprocessing
error output is incorrect : it is '1' less than the actual line number
in the source file. As shown, I am using version 2.8.0 of ecpg. Is my
version being too old to be buggy ? Any suggestion to bypass the
translation problem ?

Thanks,
Raymond Fung.