В '{{ (path('change_todo_status', {'todo_id': todoId})) }}'
ветка ожидает переменную ветки. У меня уже была эта проблема, и я использовал замену в javascript для замены.
В примере:
let todoId = cb.getAttribute('data-id');
/*
* this will generate a path with ReplaceMeWithCorrectValue instead of the correct value.
* You have to use a placeholder that correspond to the restrictions defined in your route.
*/
let url = "{{ (path('change_todo_status', {'todo_id': 'ReplaceMeWithCorrectValue'})) }}";
url = url.replace("ReplaceMeWithCorrectValue", todoId);
А затем, в вашем Ajax:
$.ajax({
url: url,
// the remain of your code
В стандарте C99 в п. 7.17.3 говорится, что NULL
«расширяется до определенной в реализации константы нулевого указателя ». Между тем, §6.3.2.3.3 определяет константу нулевого указателя как «целочисленное константное выражение со значением 0 или такое выражение, приведенное к типу void *
». Поскольку нет другого определения для константы нулевого указателя, соответствующее определение NULL
должно быть расширено до целочисленного константного выражения со значением ноль (или приведено к void *
).
Дальнейшее цитирование из C FAQ вопрос 5.5 (выделение добавлено):
Раздел 4.1.5 Стандарта C утверждает, что NULL «расширяется до определенной в реализации постоянной нулевого указателя, ”, Что означает, что реализация может выбирать, какую форму 0 использовать и использовать ли приведение` void * `; см. вопросы 5.6 и 5.7. «Определено реализацией» здесь не означает, что NULL может быть #defined, чтобы соответствовать некоторому зависящему от реализации ненулевому значению внутреннего нулевого указателя .
Это имеет смысл; поскольку стандарт требует нулевой целочисленной константы в контекстах указателя, чтобы скомпилировать в нулевой указатель (независимо от того, имеет ли внутреннее представление машины это значение, равное нулю), случай, когда NULL
определен как ноль должен быть обработан в любом случае. Программист не обязан вводить NULL
для получения нулевых указателей; это просто стилистическое соглашение (и может помочь отловить ошибки, например, когда NULL
, определенный как (void *)0
, используется в контексте без указателя).
Редактировать: один источник путаницы здесь, кажется, является кратким языком, используемым стандартом, то есть он явно не говорит, что нет другого значения , которое можно считать константой нулевого указателя. Однако когда в стандарте говорится «… называется константой нулевого указателя», это означает, что точно заданные определения называются константами нулевого указателя. Нет необходимости явно следовать каждому определению, указав, что является несоответствующим, когда (по определению) стандарт определяет, что соответствует .
Ну, я нашел способ доказать, что
#define NULL ((void*)-1)
не является юридическим определением NULL.
int main(void)
{
void (*fp)() = NULL;
}
Инициализация указателя функции с помощью NULL является допустимой и правильной, тогда как ...
int main(void)
{
void (*fp)() = (void*)-1;
}
... это нарушение ограничения, которое требует диагностики. Так что это вышло.
Но определение __builtin_magic_null_pointer
в NULL
не будет страдать от этой проблемы. Я все еще хотел бы знать, может ли кто-нибудь придумать причину, почему этого не может быть.
Целочисленное константное выражение со значением 0, или , такое как выражение, приведенное к типу void *, называется константой нулевого указателя .
NULL, который расширяется до определенной в реализации константы нулевого указателя ;
, следовательно, либо
NULL == 0
или
NULL == (void *) 0
Константа нулевого указателя должна оценивать 0, иначе выражения типа ! Ptr
не будут работать как ожидал.
NULL макрос расширяется до 0-значного выражения; AFAIK, так было всегда.