я написал это намеренно неправильного код-Werror = формат: как компилятор знает
printf("%d %d", 1);
компиляции с g++
и -Werror=format
.
Компилятор дает это очень внушительное предупреждение:
error: format '%d' expects a matching 'int' argument [-Werror=format]
Насколько я могу видеть, что нет никакого способа, компилятор может сказать, что код неверен, поскольку строка формата не не разобран до момента выполнения.
Мой вопрос: имеет ли компилятор специальную функцию, которая срабатывает для printf и подобных функций libc, или это функция, которую я мог бы использовать для своих собственных функций? Строковые литералы?
«потому что строка формата не анализируется до времени исполнения», вы уверены? Это интересно, если это правда. Не имеет смысла, чтобы меня оставили на время исполнения. –
Компилятор не анализирует магический код. Он имеет специальную проверку для 'printf' и аналогичных функций' libc'. Он не будет автоматически работать с вашими собственными функциями. – Jesper