- 论坛徽章:
- 0
|
10可用积分
由来:
我在C/cpp语言头文件程序里面这样写一个宏
#define tr_vprintln(fmt, ...) trace_function(__FILE__,__LINE__,(fmt),__VA_ARGS__,(char*)0)
这里的trace_function是我自己实现的一个函数,里面用到stdarg的内容,所以用一个宏来引用它。gcc编译没有问题。
现在的问题是: 一个.pc文件里面引用这个宏,Pro*C在编译它的时候,处理.pc文件时总是认为 "..." 是非法的,然后就在当前目录下面生成3个名字叫tpXXXXXXX的文件,这里XXXXXX是一个随机的没有意义的字符串。每次编译Pro*C遇到错误就生成3个这样的文件,最后目录里面堆满了无用垃圾。出错信息向下面那样:
我想知道
(1) Pro*C不能处理" ... "这样的stdarg的c语言表达式吗? 为什么总认为这是一个错误? 如何克服?
(2) Pro*C遇到错误的时候(Oracle10.2.0.1客户端带的proc),总是会生成一些垃圾文件。如何克服这一点?
--------------------------------------------------------------------
proc CODE=CPP MODE=ORACLE THREADS=YES LINES=YES CHAR_MAP=STRING DYNAMIC=ANSI include=./ include=../../head include=/usr/include include=/home/oracle/install/rdbms/public include=./ include=../../head include=/usr/include include=/home/oracle/install/rdbms/public include=/usr/include/linux include=/usr/lib/gcc/i386-redhat-linux/4.1.2/include include=../../../headers/common iname=dbAccessor.pc oname=dbAccessor.cpp
Pro*C/C++: Release 10.2.0.1.0 - Production on Tue Sep 9 20:30:53 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
System default option values taken from: /home/oracle/install/precomp/admin/pcscfg.cfg
Syntax error at line 9, column 26, file ../../../headers/common/dptrace.h:
Error at line 9, column 26 in file ../../../headers/common/dptrace.h
#define tr_vprintln(fmt, ...) trace_vprintf(__FILE__,__LINE__,(fmt),__VA_ARGS__,(char*)0);
..........................1
PCC-S-02014, Encountered the symbol "..." when expecting one of the following:
an identifier, define, elif, else, endif, error, if, ifdef,
ifndef, include, line, pragma, undef, exec, sql, begin, end,
var, type, oracle, an immediate preprocessor command,
a C token, create, function, package, procedure, trigger, or,
replace, |
最佳答案
查看完整内容
1,proc是不会处理具体的C的语法。它只关心exec sql开头的语句部分处理。从你的描述上看,应当定义trace宏的头文件,你用了exec sql include 来包含了。因此属于proc的处理范围。如果这段头文件中没有exec sql的标识符,你可以# include ...。这样就推给了C的预处理。就不会有这个错误。如果还是不行,建议你单独取出这段定义放到另外一个文件,然后 # include2,VA_ARGS这个参数宏是c99的支持。如果你需要使用,应当显示的打开c99 ...
|