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.