Язык C++ допускает определения в большем количестве мест программы по сравнению с языком C.
Также вам может показаться, что такая тема как http://zaverstaem.ru/price.php никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт zaverstaem.ru
Тема сколько стоит верстка там представлена весьма широко.
Рассмотрим пример.
for (int i = 0; i
// недопустимое в языке C while (struct S* p = next(q)) { // определение указателя p,
// недопустимое в языке C
/* */
} ’ ’ ’ void f(int i)
{
if (i< 0 || max<=i) error("ошибка диапазона");
int a[max]; // ошибка: объявление после инструкции
// в языке С не разрешено
/* */
} ’ ’ ’
Язык C (C89) не допускает объявлений в разделе инициализации счетчика цикла for, в условиях и после инструкций в блоке. Мы должны переписать предыдущий фрагмент как-то так:
int i;
for (i = 0; i
struct S* p;
while (p = next(q)) {
/* */
} ’ ’ ’ void f(int i)
{
if (i< 0 || max<=i) error("ошибка диапазона");
{
int a[max];
/* */
} ’ ’ ’
}
lyl В языке С++ неинициализированное объявление считается определением; в языке С оно считается простым объявлением, поэтому его можно дублировать.
int x;
int x; /* определяет или объявляет одну целочисленную переменную
с именем x в программе на языке C; ошибка в языке C++ */
В языке С++ сущность должна быть определена только один раз. Ситуация становится интереснее, если эти две переменные типа int с одинаковыми именами находятся в разных модулях компиляции.
/* в файле x.c: */ int x;
/* в файле y.c: */ int x;
Ни компилятор языка С, ни компилятор языка С++ не найдет никаких ошибок в файлах x.c or y.c. Но если файлы x.c и y.c скомпилировать как файлы на языке С++, то редактор связей выдаст сообщение об ошибке, связанной с двойным определением. Если же файлы x.c и y.c скомпилировать на языке C, то редактор связей не выдаст сообщений об ошибке и (в полном соответствии с правилами языка C) будет считать, что речь идет об одной и той же переменной x, совместно используемой в файлах x.c и y.c. Если хотите, чтобы в программе всеми модулями совместно использовалась одна глобальная переменная x, то сделайте это явно, как показано ниже.
/* в файле x.c: */
int x = 0; /* определение */
/* в файле y.c: */
extern int x; /* объявление, но не определение */
Впрочем, лучше используйте заголовочный файл.
/* в файле x.h: */
extern int x; /* объявление, но не определение */
/* в файле x.c: */
#include "x.h"
int x = 0; /* определение */
/* в файле y.c: */
#include "x.h"
/* объявление переменной x находится в заголовочном файле */
А еще лучше: избегайте глобальных переменных.
Опубликовал katy
May 01 2015 10:35:39 ·
0 Комментариев ·
3933 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.