Maxim Sakharov -> [email protected] @ Thu, 02 Jul 2015 23:31:19 +0700:
MS> Есть ли специалисты по Си? Сын изучает язык, я ему помогаю. Вопрос такой: во MS> вложенной программе строка s2 описана как массив символов длиной 20, а я могу MS> обратиться к подстроке этой строки, начинающейся с 22-го символа. Это MS> нормально или компилятор должен ловить такие ситуации? У меня Debian GNU/Linux MS> 7, компилятор gcc 4.7.2. С точки зрения стандарта C, это нормально. В C по стандарту обращение к элементу массива - это всего лишь адресная арифметика, без каких-либо дополнительных проверок. Компилятор может, если ситуация очевидная, распознать такую ошибку и выдать предупреждение, но это не запрещенное действие. Чисто в теории стандарт, наверное, допускает дополнительные проверки перед арифметикой, если обращение идет именно как к элементу массива, но на практике никто так не делает. Сгенерированный машинный код точно не будет содержать таких проверок. Меня, кстати, в этом коде куда больше смущает обращение &s1. Вместо положенного s1. И это, в отличие от выхода за границу, gcc с -Wall рассказывает. В данном случае, из-за некоторой корявости стандарта, результат, вероятно, одинаковый, но стоит заменить там массив на указатель, наступим на грабли. -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: https://lists.debian.org/[email protected]

