Легкий способ сделать это через XML. Я использовал @Component
в уже обработанном jsf bean, но @Autowired
не работал, потому что управляемый bean-компонент уже присутствовал в faces-config.xml. Если необходимо сохранить это управляемое имя компонента вместе с его управляемым свойством в XML-файле, тогда предлагается добавить весенний компонент в качестве другого управляемого свойства внутри тега управляемого компонента. Здесь весенний боб в нем определяется в spring-config.xml (может быть где-то попеременно). пожалуйста, обратитесь к https://stackoverflow.com/a/19904591/5620851
под редакцией меня. Я предлагаю либо реализовать его полностью через аннотацию @Managed и @Component, либо через xml для обоих.
Это зависит от того, что Вы подразумеваете 'действительно под совместимыми стандартами'. Однако короткий ответ, "это - хорошая идея гарантировать, чтобы все функции имели прототип в объеме прежде чем быть используемым".
А более квалифицированный ответ отмечает что, если функция принимает аргументы переменной (особенно printf()
семья функций), то прототип должен быть в объеме, чтобы быть строго совместимыми стандартами. Это верно для C89 (от ANSI) и C90 (от ISO; то же как C89 за исключением нумерации раздела). Кроме функций 'varargs', тем не менее, функционирует, каким возвратом int
не должны быть объявлены, и функции, которые возвращаются, чему-то другому, чем int
действительно нужно объявление, которое показывает, что возврат вводит, но не нуждается в прототипе для списка аргументов.
Примечание, однако, что, если функция берет аргументы, которые подвергаются 'нормальным продвижениям' в отсутствие прототипов (например, функция, которая берет char
или short
- оба из которых преобразовываются в int
; более серьезно, возможно, функция, которая берет float
вместо double
), тогда прототип необходим. Стандарт был слаб об этом, чтобы позволить старому коду C компилировать в соответствии со стандартными совместимыми компиляторами; более старый код не был записан для волнения об обеспечении, что функции были объявлены перед использованием - и по определению, более старый код не использовал прототипы, так как они не стали доступными в C, пока не был стандарт.
C99 запрещает 'неявный интервал'..., который означает оба чудных случая как' static a;
' (int
по умолчанию) и также объявления неявной функции. Они упоминаются (наряду с приблизительно 50 другими существенными изменениями) в предисловии к ISO/IEC 9899:1999, который сравнивает тот стандарт с предыдущими версиями:
- удаляют неявный
int
, †¦- удаляют объявление
неявной функции В ISO/IEC 9899:1990, В§6.3.2.2 , Вызовы функции указали:
, Если выражение, которое предшествует заключенному в скобки списку аргументов в вызове функции, состоит только из идентификатора, и если никакое объявление не видимо для этого идентификатора, идентификатор неявно объявляется точно как будто, в самом внутреннем блоке, содержащем вызов функции, объявление:
extern int identifier();
появился. <глоток> 38 глоток>
<глоток> 38 глоток> таким образом, идентификатор с областью действия блока, которая, как объявляют, имела внешнюю связь с типом, функционирует без информации о параметре и возврата
int
. Если на самом деле это не определяется, поскольку имеющий тип “function возвратint
, ” поведение не определено.
Этот абзац отсутствует в стандарте 1999 года. Я еще не отследил изменение в формулировке, которая позволяет static a;
в C90 и запрещает его (требование static int a;
) в C99.
Примечание, что, если функция статична, оно может быть определено, прежде чем оно будет использоваться, и не должен предшествоваться объявлением. GCC может быть убежден болтать, если нестатическая функция определяется без объявления, предшествующего ему (-Wmissing-prototypes
).
Нет, для функций не всегда нужен прототип. Единственное требование - то, что функция "объявляется" перед использованием ее. Существует два способа объявить функцию: записать прототип или записать саму функцию (названный "определением".) определением всегда является объявление, но не все объявления определения.
Да, каждая функция должна иметь прототип, но тот прототип может появиться или в отдельном объявлении или как часть определения функции. Функциональные определения, записанные в C89 и естественно, имеют прототипы, но если Вы пишете вещи в классическом K& R стиль, таким образом:
main (argc, argv)
int argc;
char **argv;
{
...
}
тогда функциональное определение не имеет никакого прототипа. Если Вы пишете ANSI C (C89) стиль, таким образом:
main (int argc, char **argv) { ... }
тогда функциональное определение имеет прототип.
Насколько я знаю (в ANSI C89/ISO C90), нет. Я не уверен в C99; однако, я ожидал бы то же.
Личное сообщение: я только пишу прототипов функции когда...