我想在debian稳定环境中在某些源上运行splint
。
我需要给预处理器指令-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(最小的不起作用示例)
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包含到我的
.splintrc
中呢? 最佳答案
-新答案-
您要问的只是没有在夹板中实现。
如果您查看rcfiles.c行中的夹板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行中的注释符合您的要求。
我将线151更改为
151 if (c == '\t' || c == '\n')
编译,运行,然后最小的不起作用示例(.splintrc中没有引号)通过了测试,没有问题。
但是,此修改有点粗糙,因为某些夹板单元测试随后失败了。