2

我需要使用Oracle pro*C来处理EXEC SQL声明。但是,我在 SQL 部分有一些宏,我想通过使用 gnuC 进行预处理来替换它们。

问题是从版本 4 开始,gnuC 预处理添加了__extension__. pro*C 预处理器拒绝__extension__并显示以下消息:

Syntax error at line 16, column 15, file xxx.ppc:
Error at line 16, column 15 in file xxx.ppc
__extension__ typedef unsigned long long int __u_quad_t;
..............1
PCC-S-02201, Encountered the symbol "typedef" when expecting one of the followin
g:

   ; , = ( [
The symbol ";" was substituted for "typedef" to continue.

如何使 gnuC 不产生这些关键字?

谢谢

4

2 回答 2

2

您也许可以摆脱__extension__C 预处理器。将以下内容放在#include包含 的标头之前__extension__

#define __extension__

然后这会转化__extension__为稀薄的空气。

但我不确定它是否会起作用;我不知道 pro*C 发生的事情的顺序(更具体地说,pro*C 和 CPP 如何协同工作)。

此外,这可能会导致删除它引起的其他问题。这仅仅意味着您可能必须使用其他 CPP 技巧才能使其全部正常工作。

于 2014-03-11T14:49:58.193 回答
0

似乎我们几乎可以通过其他方式做到这一点:放宽 pro*C 要求,使用参数parse=partial.

请参阅: https ://stackoverflow.com/a/2468655/185460

但是在这种情况下VARCHAR,例如声明中使用的宏不会被替换。所以问题依然存在!

于 2014-03-11T14:21:37.797 回答