我需要使用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不产生这些关键字?
谢谢
您可以使用C预处理器来摆脱__extension__
。在包含__extension__
的标题的#include
s之前放置以下内容:
#define __extension__
然后将__extension__
转换为稀薄的空气。
但我不确定它是否会工作;我不知道pro*C中事情发生的顺序(更具体地说,pro*C和CPP是如何一起工作的)。
此外,这可能会导致删除它引起的其他问题。这仅仅意味着您可能需要使用其他CPP技巧才能使其正常工作。
似乎我们几乎可以用另一种方式做到这一点:使用参数parse=partial
来放松pro*C要求。
看:https://stackoverflow.com/a/2468655/185460
但是在这种情况下,例如VARCHAR
声明中使用的宏不会被替换。所以问题依然存在!