免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3988 | 回复: 4
打印 上一主题 下一主题

[请教]Pro*C遇编译错误时,总生成一堆乱七八糟的文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-09 22:29 |只看该作者 |倒序浏览
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 ...

论坛徽章:
0
2 [报告]
发表于 2008-09-09 22:29 |只看该作者
1,proc是不会处理具体的C的语法。它只关心exec sql开头的语句部分处理。从你的描述上看,应当定义trace宏的头文件,你用了exec sql include 来包含了。因此属于proc的处理范围。
如果这段头文件中没有exec sql的标识符,你可以# include ...。这样就推给了C的预处理。就不会有这个错误。如果还是不行,建议你单独取出这段定义放到另外一个文件,然后 # include
2,VA_ARGS这个参数宏是c99的支持。如果你需要使用,应当显示的打开c99支持。打开c99支持,每个编译器都不同。你应该具体的查阅你的c编译器。

论坛徽章:
0
3 [报告]
发表于 2008-09-09 22:48 |只看该作者
3.关于你说的垃圾,这个没有办法。你可以make时候随便删除tp???????*这样的文件。
不知道还有没有更好的办法。

论坛徽章:
0
4 [报告]
发表于 2008-09-10 00:01 |只看该作者
谢谢楼上的,再小声问一个小问题: 我应该如何结帖给你分? 偶CU新手,5555555

论坛徽章:
0
5 [报告]
发表于 2008-09-10 00:23 |只看该作者
呵呵,有分当然要收啦:) 谢谢啦

你把我的回复贴,设为最佳答案就可以啦。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP