6

splintDebian の安定した環境内で、いくつかのソースを実行したいと考えています。
プリプロセッサ ディレクティブを指定-DUINT16_T='unsigned short'する必要があり、非常に頻繁に必要になります。ファイル内に配置したいと思い.splintrcます。
コマンドラインから実行するsplint -DUINT16_T='unsigned short' mysource.cとうまくいきます。この行を私の.splintrcファイルに移動する場合

-DUINT16_T='unsigned short'
-I/usr/local/include/

splint呼び出しの結果

Cannot list files in .splintrc files:
                                 short' (probable missing + or -)
  A flag is not recognized or used in an incorrect way (Use -badflag to inhibit
  warning)

誰にも解決策はありますか?(別名なしでお願いします)。

さらなる議論のために、私は mnwe (minimal not working example) を提供しますhello.c。これは役立つかもしれません:

#include <stdio.h>

int main (void)
{
  UINT16_T returnvalue=0;
  printf ("Hello, world!\n");
  return returnvalue;
}

コマンドgcc -DUINT16_T='unsigned short' hello.cは正常に実行されます-splint -DUINT16_T='unsigned short' hello.cもちろん、どちらも主張します

Return value type unsigned short int does not match declared type
                 int: returnvalue

しかし、繰り返しになりますが、この DEFINE を my に含めるにはどうすればよい.splintrcですか?

4

2 に答える 2

1

--新しい答え--

あなたが求めていることは、スプリントに実装されていません。

rcfiles.c 行 124のスプリント 3.1.2 rcfiles_loadFile関数を見ると、

124          while ((c = *s) != '\0')
125             { /* remember to handle spaces and quotes in -D and -U ... */
126               if (escaped)
127                 {
128                   escaped = FALSE;
129                 }
130               else if (quoted)
131                 {
132                   if (c == '\\')
133                     {
134                       escaped = TRUE;
135                     }
136                   else if (c == '\"')
137                     {
138                       quoted = FALSE;
139                     }
140                   else
141                     {
142                       ;
143                     }
144                 }
145               else if (c == '\"')
146                 {
147                   quoted = TRUE;
148                 }
149               else
150                 {
151                  if (c == ' ' || c == '\t' || c == '\n')
152                    {
153                      /*@innerbreak@*/ break;
154                    }
155                }
156 
157               s++;
158               incColumn ();
159             }

125 行目のコメントは、質問に対する TODO であることがわかります。

151行目を次のように変更しました

151                  if (c == '\t' || c == '\n')

コンパイルして実行すると、最小限の動作しない例 (.splintrc に引用符なし) が問題なくテストに合格します。

ただし、一部のスプリント単体テストが失敗するため、この変更は少し大雑把です。

于 2014-07-24T12:22:31.063 に答える
0

一重引用符ではなく二重引用符を使用してください。

-DUINT16_T="unsigned short"
于 2015-04-27T16:23:01.463 に答える