Как splint узнает, что моя функция не используется в другом файле? - PullRequest
0 голосов
/ 12 апреля 2009

Splint дает мне следующее предупреждение:

encrypt.c:4:8: Function exported but not used outside encrypt: flip
  A declaration is exported, but not used outside this module. Declaration can
  use static qualifier. (Use -exportlocal to inhibit warning)
   encrypt.c:10:1: Definition of flip

Так как я вызвал шину только для этого файла, откуда он это знает?

#include        <stdio.h>
#include        <stdlib.h>

int    flip( int a)
{
        int b;
        b = a;
        b ^= 0x000C;
        return b;
}

int     blah(int argc, char    *argv[]) {

        FILE    *fp = NULL, *fpOut=NULL;
        int             ch;
        ch = 20; flip(20); return (ERROR_SUCCESS);
}

Я даже избавился от основного, чтобы он не мог понять, что файл завершен каким-либо образом. Я в полном замешательстве!

Ответы [ 4 ]

2 голосов
/ 12 апреля 2009

Вы можете обнаружить, что если вы включите заголовок, который объявил flip() - как вы, конечно, должны - тогда splint не будет жаловаться. Вы также должны объявить blah() в заголовке.

Я не совсем уверен, что это объяснение, потому что blah() вообще не используется (хотя он использует flip()), и вы не упоминаете splint, жалующийся на это.

Однако рекомендуется делать каждую функцию (в C) static до тех пор, пока вы не продемонстрируете, что она необходима вне исходного файла, а затем убедитесь, что есть заголовок, который объявляет функцию, и что заголовок используется в файле, который определяет функцию, и в каждом файле, который использует функцию.

В C ++ «каждая функция должна быть static», совет становится «каждая функция должна быть определена в анонимном пространстве имен».

1 голос
/ 12 апреля 2009

Так как я вызвал шину только для этого файла, откуда он это знает?

Вы ответили на свой вопрос. Вы загрузили один файл в lint, поэтому lint знает, что есть только файл, о котором нужно позаботиться (кроме стандартного заголовка, конечно, включающего).

1 голос
/ 12 апреля 2009

int flip () не объявлен как статический, поэтому его можно использовать внешне. Поскольку вы вызвали шину только с одним исходным файлом, он правильно говорит, что ваша функция, если она не используется извне, должна быть объявлена ​​статической

0 голосов
/ 12 апреля 2009

Может сообщать только о том, что видит. Игнорируйте предупреждение или следуйте инструкциям, чтобы запретить его, если вы знаете лучше, чем то, что оно говорит. Не думайте, что такой инструмент обязательно знает вашу программу лучше, чем вы.

Если он действительно не предназначен для использования вне файла, вы можете объявить его статическим, и это должно исправить проблему, но он будет недоступен из других файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...