can #line directive dynamically resolve the file path?

Jeffrey Walton noloader@gmail.com
Sun Dec 26 03:47:00 GMT 2010


On Sat, Dec 25, 2010 at 10:28 PM, asmwarrior <asmwarrior@gmail.com> wrote:
> On 2010-12-26 11:17, Jeffrey Walton wrote:
>>
>> On Sat, Dec 25, 2010 at 10:00 PM, asmwarrior<asmwarrior@gmail.com>  wrote:
>>>
>>> Hi, I have a question about #line directive. I have two files. a.c and
>>> b.c
>>> under my c:/ (I use Windows MinGW)
>>>
>>> Now, I have a.c
>>> ---------------------------------------------
>>> int main()
>>> {
>>>  #line 1 "b.c"
>>>  int a
>>>  return 0;
>>> }
>>> ---------------------------------------------
>>> and b.c
>>> ---------------------------------------------
>>> int f1()
>>> {
>>>  return 0;
>>> }
>>> ---------------------------------------------
>>>
>>>
>>> Now, I try to run the command line:
>>>
>>> C:\>gcc -c C:\a.c
>>> b.c: In function 'main':
>>> b.c:2:3: error: expected '=', ',', ';', 'asm' or '__attribute__' before
>>> 'return'
>>> C:\>
>>>
>>> You can see, the gcc report error says there are some error in "b.c" but
>>> not
>>> "c:\b.c".
>>> which means gcc can not dynamically resolve the file path after the #line
>>> directive.
>>>
>>> Though I can hard-coded the "c:/b.c" to the a.c file, but this is not a
>>> good
>>> solution because I would always move the code to other place.
>>>
>>> My question is: Can any one give me an idea to solve this kind of
>>> problem?
>>> thanks.
>>>
>>>
>>> One reference is:
>>> http://gcc.gnu.org/onlinedocs/cpp/Line-Control.html#Line-Control
>>
>> Writing a parser generator?
>
> Thanks for your reply!!
>
> Correct, in-fact, I'm using QUEX lexical lexer generator:
> https://sourceforge.net/projects/quex/
My apologies then.

>
> And my question comes the case that I would like to distribute the generated
> lexer code with the Quex code base. But the lexer code contains a lot of
> #line directive which reference to Quex code base.
>
> see the discussion here:
> https://sourceforge.net/projects/quex/forums/forum/574343/topic/4001340?message=8948936
>
>> Try __LINE__ and __FILE__ instead.
>> http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
>>
>> Jeff
>
> Did you mean that I just do some thing like this?
Never used it. Sorry.

Jeff



More information about the Gcc-help mailing list