Это не работает, потому что вы используете имя page
как для ForeignKey
для страницы, на которую вы ссылаетесь (в RelatedLinks
), так и ParentalKey
, указывающей на содержащую страницу (в SUAWebPageRelatedLinks
). Вам нужно будет переименовать один из них.
Да.
Из отрывка тега из повторного входа :
Подпрограмма считается повторно входящей, если ее можно безопасно вызвать до завершения предыдущего вызова.
blockquote>В вашем случае, поскольку функция возвращает адрес только глобальной (статической) переменной, которая должна оставаться постоянной после запуска программы, функция хорошо возвращается.
IMO, реентерабельная функция может получать доступ к глобальным и статическим данным, без изменения , поэтому получение адреса глобальной переменной неплохо для реентерабельной функции.
При рассмотрении того, является ли функция реентерабельной или нет, пример должен быть немного менее тривиальным, чем этот.
pDNM DNMManager_New(void) //reentrant?
{
return &DNMTemp;
}
Но ссылка на DNMTemp
(его адрес) останется неизменной во время выполнения программы, поэтому эта функция реентерабельна.
Но если вы получите доступ к реальным данным, это не так.
uint32_t DNMManager_read(void) //reentrant?
{
return SerialNum;
}