Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

Пользователей: 13,368
новичок: Goosprin
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Диплом - база данных поставщиков на Delphi (MS Sql Server)+ Пояснительна...
Метод конечных разностей для интерполяции/экстраполяции на Delphi
Моделирование круглосуточного интернет кафе на GPSS + Отчет

Язык С: проверка типов аргументов функций
Рассмотрим следующий пример: int main()
{
f(2);
}
[-7Г Компилятор языка С допускает такой код: вы не обязаны объявлять функции
* до их использования (хотя можете и должны). Определение функции f() может находиться где-то в другом месте. Кроме того, функция f() может находиться в другом модуле компиляции, в противном случае редактор связей сообщит об ошибке.


К сожалению, это определение в другом исходном файле может выглядеть следующим образом:
/* other_file.c: */ int f(char* p)
{
int r = 0; while (*p++) r++; return r;
}


Также вам может показаться, что такая тема как
http://diadel.ru/products/zimniy_sad/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт diadel.ru
Тема конструкция зимний сад там представлена весьма широко.

Редактор связей не сообщит об этой ошибке. Вместо этого вы получите ошибку на этапе выполнения программы или случайный результат.
Как решить эту проблему? На практике программисты придерживаются согласованного использования заголовочных файлов. Если все функции, кото-
рые вы вызываете или определяете, объявлены в заголовке, поставленном в соответствующее место программы с помощью директивы #include, будет включен механизм проверки типов. Однако в больших программах на это трудно рассчитывать. Вследствие этого в большинстве компиляторов языка С существуют опции, предусматривающие выдачу предупреждений о вызовах необъявленных функций: воспользуйтесь ими. Кроме того, с первых дней существования языка C появились программы, с помощью которых можно выявлять все возможные проблемы, связанные непротиворечивостью типов. Обычно они называются lint. Используйте их для любой нетривиальной программы на языке С. Вы обнаружите, что программы lint подталкивают вас использовать язык С как подмножество языка С++. Одно из наблюдений, приведших к разработке языка С++, состояло в том, что компилятор мог легко проверять многое (но не все), что могли проверять программы lint.
Вы можете попросить включить проверку аргументов функций в языке С. Для этого достаточно объявить функцию с заданными типами аргументов (точно так же, как в языке С++). Такое объявление называется прототипом функции (function prototype). Тем не менее следует избегать объявлений, не задающих аргументы; они не являются прототипами функций и не включают механизм проверки типов.
int g(double); /* прототип — как в языке С++ */
int h(); /* не прототип — типы аргументов не указаны */
void my_fct()
{
g(); /* ошибка: пропущен аргумент */
}
g("asdf"); /* ошибка: неправильный тип аргумента */
g(2); /* OK: 2 преобразуется в 2.0 */
g(2,3); /* ошибка: один аргумент лишний */
h(); /* Компилятор допускает! Результат непредсказуем */
h("asdf"); /* Компилятор допускает! Результат непредсказуем */
h(2); /* Компилятор допускает! Результат непредсказуем */
h(2,3); /* Компилятор допускает! Результат непредсказуем */
В объявлении функции h() не указан тип аргумента. Это не означает, что функция h() не получает ни одного аргумента; это значит: принимает любой набор аргументов и надеется, что это набор при вызове окажется правильным. И снова отметим, что хороший компилятор предупредит об этой проблеме, а программа lint перехватит ее.
С++
void f(); // предпочтительно
void f(void);
void f(...); // получает любые // аргументы
Эквивалент в языке С
void f(void); void f(void);
void f(); // получает любые // аргументы
Существует специальный набор правил, регламентирующих преобразование аргументов, если в области видимости нет прототипа функции. Например, переменные типов char и short преобразуются в переменные типа int, а переменные типа float — в переменные типа double. Если вы хотите знать, скажем, что произойдет с переменной типа long, загляните в хороший учебник по языку С. Наша рекомендация проста: не вызывайте функций, не имеющих прототипов.

Обратите внимание на то, что, хотя компилятор допускает передачу аргументов неправильного типа, например параметр типа char* вместо параметра типа int, использование таких аргументов приводит к ошибкам. Как сказал Деннис Ритчи: “С — это язык программирования со строгим контролем типов и слабой проверкой”.
Опубликовал katy April 28 2015 20:57:30 · 0 Комментариев · 2579 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Нестандартные при...
Карта сайта
Приемы программир...
Delphi 2005. Разр...
CoolHints2k
Counter [Исходник...
Delphi 2005 для .NET
Язык программиров...
Иллюстрированный ...
Illusion
TDBF
Borland Delphi 8 ...
Измерение тактово...
Отключение и вклю...
Мониторинг сервер...
Adapter (пример D...
Программирование ...
Шейдеры в Delphi
Род Стивенс. Delp...
Обучение Borland ...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97833
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Язык С: инструкции
Вулкан Платинум ка...
ПРИНЦИП РАБОТЫ СИС...
Слоты Gms Deluxe с...
Рабочий стол Windo...
File access denied
Вулкан клуб онлайн
Коллекция диалогов
Power
Выравнивание текст...
Пошаговый анализ к...
Работа в Windows 10
Строки в стиле язы...
Распределенные сис...
Приложения пакетно...
Разработка инфогра...
Описать объект, вк...
Введение
Логическое «ИЛИ» (...
Конфигурирование м...
Что документировать
Важные замечания п...
Решение логических...
Маршалер свободной...
Константы основных...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?