读书人

条件编译的有关问题

发布时间: 2012-02-10 21:27:42 作者: rapoo

条件编译的问题,急!!
这是我的头文件
#ifndef head
#define head
struct a1
{
charb1[100];
charb2[2];

}

EXEC SQL BEGIN DECLARE SECTION;
#ifdef DB_DB2_64
struct a2
{
sqlint64 c1;
shortc2;
}
#else
struct a2
{
long c1;
shortc2;
}
#endif
EXEC SQL END DECLARE SECTION;
#endif
因为64的db2要把long转变成sqlint64,所以定义了宏DB_DB2_64。
在连接oracle数据库时,一切正常,在连db2和postgresql时,就报错了。db2报变量重复定义(即#ifdef DB_DB2_64不起作用),而postgresql直接在#ifdef DB_DB2_64这里报语法错。请大侠们教我,先谢谢大家了!!!!


[解决办法]
那你是否

#define DB_DB2_64

了呢?
[解决办法]
原因可能是DB2和Postgres 的 EC 预处理器不支持 #ifdef 预处理指令,不过EC的变量只有INT,SHORT,CHAR,FLOAT,NUMBER,DATE,你的两个结构是为主变量定义的,那就不要放在 EXEC SQL DECLARE 部分,应该就可以通过了!
#ifndef head
#define head
struct a1
{
charb1[100];
charb2[2];

}

#ifdef DB_DB2_64
struct a2
{
sqlint64 c1;
shortc2;
}
#else
struct a2
{
long c1;
shortc2;
}
#endif

EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
#endif

[解决办法]
看你的宏能否区分开不同的平台了

读书人网 >C语言

热点推荐