簡體   English   中英

哪個c方言可以讓GCC編譯一些樂趣(...)?

[英]Which c dialect can let GCC compile some fun(…)?

編譯一些具有函數原型的遺留代碼Ac

void somefun(...)

gcc 4.1.2總是說出錯誤

 error: ISO C requires a named argument before ...

但我不能修改代碼,所以我應該使用什么C dialet選項讓GCC編譯這段代碼?

gcc -c A.c ????

我認為不再可能了。 請參閱此處的評論(3.4.0 - 已經很老了)GCC源代碼c-parse.in

/* This is what appears inside the parens in a function declarator.
   Is value is represented in the format that grokdeclarator expects.  */
parmlist_2:  /* empty */
        { $$ = get_parm_info (0); }
    | ELLIPSIS
        { $$ = get_parm_info (0);
          /* Gcc used to allow this as an extension.  However, it does
             not work for all targets, and thus has been disabled.
             Also, since func (...) and func () are indistinguishable,
             it caused problems with the code in expand_builtin which
             tries to verify that BUILT_IN_NEXT_ARG is being used
             correctly.  */
          error ("ISO C requires a named argument before `...'");

GCC 2.95.3有相同的評論。

較新版本的GCC(4.6.1)也沒有選擇接受該代碼(來自gcc / c-parse.c):

static struct c_arg_info *
c_parser_parms_list_declarator (c_parser *parser, tree attrs)
{
...
  if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
    {
      struct c_arg_info *ret = build_arg_info ();
      /* Suppress -Wold-style-definition for this case.  */
      ret->types = error_mark_node;
      error_at (c_parser_peek_token (parser)->location,
        "ISO C requires a named argument before %<...%>");
      c_parser_consume_token (parser);

我不認為GCC中的任何C方言都接受這個,但G ++確實如此。 你可以做的是將函數定義放在extern "C" {}塊中,並用g++編譯包含它的模塊(假設它也是一個有效的C ++函數)。

然后,您必須在C中使用void somefun() (K&R樣式)聲明它。

但是,這也需要與g++鏈接。

如果C ++鏈接不是您想要的,那么您應該將該函數更改為不帶參數並以K&R樣式聲明它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM