1 / 1 / 2
Регистрация: 10.06.2013
Сообщений: 71

Глобальное объявление переменных

15.08.2013, 10:02. Показов 1440. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дано:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#define MAXLINE 1000 /* maksimal'naya dlona stroki */
int max; /* Òåêóùàÿ ìàêñèìàëüíàÿ äëèíà */
char line[MAXLINE];
char longest[MAXLINE];
 
int getline (void);
void copy (void);
/* âûâîä ñàìîé äëèííîé ñòðîêè â ïîòîêå */
main()
{
    int len; /* Äëèíà òåêóùåé ñòðîêè*/
    extern int max;
    extern char longest[];
       
    max=0;
    while ((len=getline())>0)
    if (len>max)
    {
                max=len;
                copy();
                }
    if (max>0)
                printf("%s",longest);
                return 0;
                }
    int getline (void)
    {
        int c,i;
        extern char line[];
        for (i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c !='\n'; i++)
             line[i]=c;
        if (c=='\n'){
                     line[i]=c;
                     i++;
                     }
        line[i]='\0';
        return i;
        }
        void copy (void)
        {
             int i;
             extern char line[], longest[];
             
             i=0;
             while ((longest[i]=line[i])!='\0')
             i++;
             }
Итог: глобально объявить переменные не удалось. В чем может быть проблема?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2013, 10:02
Ответы с готовыми решениями:

Объявление переменных в промежутке
Как по нормальному объявить переменную в промежутке? unsigned int A = (A&gt;40&amp;&amp;A&lt;100) Я бы сделал вот так, это нормально работать...

Множественное объявление переменных
Поясните, пожалуйста, что я делаю не так. Я создал хэдер, где объявляю глобал-переменные. #ifndef GLOBALVAR_H_INCLUDED #define...

Пояснить объявление переменных в коде
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main(void) { int i, j = 0, n; printf(&quot;\n\t Enter the primary natural number: &quot;); ...

12
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,084
15.08.2013, 10:33
Цитата Сообщение от TheZimbabve Посмотреть сообщение
extern int max;
а зачем так делать в main?
0
1 / 1 / 2
Регистрация: 10.06.2013
Сообщений: 71
15.08.2013, 10:35  [ТС]
В функции main используется max, который я объявил глобально. Таким образом я её объявляю в функции mainf
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 12:28
Цитата Сообщение от TheZimbabve Посмотреть сообщение
Таким образом я её объявляю в функции main
Ты её уже объявил глобально.
0
1 / 1 / 2
Регистрация: 10.06.2013
Сообщений: 71
15.08.2013, 12:30  [ТС]
Ну глобально то я ее определил, а теперь в каждой функции её нужно объявить в каждой функции, которая к ней обращается. Разве нет? я это делаю через extern
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 12:32
Цитата Сообщение от TheZimbabve Посмотреть сообщение
Ну глобально то я ее определил, а теперь в каждой функции её нужно объявить в каждой функции
Определить и объявить это по-сути одно и то же.
Цитата Сообщение от TheZimbabve Посмотреть сообщение
Разве нет?
Из постов 2 и 4 уже давно стоило понять что нет.
0
1 / 1 / 2
Регистрация: 10.06.2013
Сообщений: 71
15.08.2013, 12:40  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
Определить и объявить это по-сути одно и то же.
Керниган считает иначе.

Переменная должна быть определена ровно один раз за пределами всех функций программы. При этом для неё выделяется память. Она также должна быть объявлена в каждой функции, которая к ней обращается с указанием её типа. Объявление может быть явным, с помощью оператора extern, и косвенным - по контексту.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.08.2013, 12:45
Цитата Сообщение от TheZimbabve Посмотреть сообщение
Керниган считает иначе.
А это кто?
Просто убери все строки с extern.
1
1 / 1 / 2
Регистрация: 10.06.2013
Сообщений: 71
15.08.2013, 12:48  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
А это кто?
Просто убери все строки с extern.
Мужик книгу по С написал... Ну ок, уберу.

Добавлено через 2 минуты
Цитата Сообщение от TheZimbabve Посмотреть сообщение
Мужик книгу по С написал... Ну ок, уберу.
Все, нашел. Случай с extern нужен тогда, когда переменные объявлены в другом коде.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
15.08.2013, 13:05
Цитата Сообщение от castaway Посмотреть сообщение
Определить и объявить это по-сути одно и то же.
Нет. Но определение - это частный случай объявления.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
15.08.2013, 14:16
Цитата Сообщение от Somebody Посмотреть сообщение
Нет. Но определение - это частный случай объявления.
Если более развёрнуто, то объявление - просто сообщение компилятору того, что некий символ существует и имеет некоторый тип. Определение же - помимо введения символа также и выделение для него памяти (так сказать, объявление - печать паспорта для объекта, определение - "физическое" появление объекта в программе).
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.08.2013, 02:09

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
Цитата Сообщение от TheZimbabve Посмотреть сообщение
Керниган считает иначе.
А это кто?
wiki. Керниган



Добавлено через 1 минуту
Цитата Сообщение от TheZimbabve Посмотреть сообщение
глобально объявить переменные не удалось.
всё там удалось
0
1 / 1 / 2
Регистрация: 10.06.2013
Сообщений: 71
18.08.2013, 18:26  [ТС]
Я уже разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2013, 18:26
Помогаю со студенческими работами здесь

Запрещено ли смешивать код и объявление переменных?
В читом Си, типа Turbo C (не C++) запрещено смешивать код и объявление переменных? Все типа как в паскале (в начале функции все объявляем)?

Особенности компилятора от Microsoft: объявление переменных
Здравствуйте. Есть такой код: #include &lt;Windows.h&gt; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR...

Организовать глобальное меню
Помогите, пожалуйста, организовать глобальное меню. Вот программа, состоит как бы из 2х частей - 1я это очередь на базе списка, 2я -...

Глобальное объявление кнопки
Друзья, такой небольшой вопросик. Имеется такое объявление: final Button btn = (Button)findViewById(R.id.btn_ext); Выдает исключение....

Глобальное объявление string
Здраствуйте. Подскажите пожалуйста как в visual studio 2008 для файла Form1.h объявить глобальное переменную типа string.Спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru