Форум программистов, компьютерный форум CyberForum.ru

Класс памяти по умолчанию для глобальной переменной - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заполнить рандомно массив и все отрицательные элементы отправить в конец http://www.cyberforum.ru/cpp-beginners/thread1124460.html
В массиве A=(a1, а2, ..., аn) все отрицательные элементы отправить в «хвост» массива. ( Это задание) Вот сам код. // ConsoleApplication4234452.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include "conio.h" #include <time.h>
C++ Реализовать метод приведения времени в минуты Реализовать внешнюю функцию с именем make_mun(), где mun – тип реализуемой структуры. Функция должна получать в качестве аргументов значения для полей структуры и возвращать структуру требуемого типа. При передаче ошибочных параметров следует выводить сообщение и заканчивать работу. Поле first – целое положительное число, часы; поле second – целое положительное число, минуты. Реализовать метод... http://www.cyberforum.ru/cpp-beginners/thread1124444.html
C++ Структура-пара. Реализовать метод rangecheck() – проверку заданного числа
Реализовать внешнюю функцию с именем make_mun(), где mun – тип реализуемой структуры. Функция должна получать в качестве аргументов значения для полей структуры и возвращать структуру требуемого типа. При передаче ошибочных параметров следует выводить сообщение и заканчивать работу. Поле first – дробное число, левая граница диапазона; поле second – дробное число, правая граница диапазона....
C++ Определить, лежит ли точка внутри заштрихованной области
Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений «Да», «Нет», «На границе» в зависимости от того, лежит ли точка внутри заштрихованной области, вне заштрихованной области или на ее границе. График Помогите с кодом...
C++ Удалить подряд идущие одинаковые слова из строки http://www.cyberforum.ru/cpp-beginners/thread1124426.html
Одна из ошибок, которую часто допускают неопытные наборщики - дважды написанное слово. Найти такие ошибки в заданном тексте и исправить их Помогите, пожалуйста.
C++ В матрице из нулей и единиц найти квадрат заданного размера, состоящую целиком из нулей В матрице A (m, n), которая состоит из нулей и единиц, найти квадрат заданного размера (квадратную подматрицу), состоящую целиком из нулей Помогите, пожалуйста, абсолютно нет времени это сделать. подробнее

Показать сообщение отдельно
DrOffset
7090 / 4231 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
20.03.2014, 01:08
mcoffka, у вас дока для Си. В С++ немного другие правила (и все немного сложнее). Ну да ладно
Такой переменной по умолчанию присваивается класс памяти static. То есть объявления int i=1 и static int i=1 будут эквивалентны.
Ну это не правда Вот цитата из стандарта С:
6.2.2/5
If the declaration of an identifier for an object has file scope and no storage-class specifier,
its linkage is external.
то есть, если мы явно не указали static, то переменная будет иметь внешнее связывание. А значит такой пример будет корректен:
C
1
2
3
4
5
6
7
8
9
10
// file1.c
int a = 2;
 
// file2.c
int a; 
 
int main()
{
    printf("%d", a); // выводит 2
}
Тогда как для static написано следующее:
6.2.2/3
If the declaration of a file scope identifier for an object or a function contains the storage-
class specifier static, the identifier has internal linkage
То есть, если переменная (или функция) определяется как static, то она имеет внутреннее связывание. Следовательно не может быть доступна через extern в другой единице трансляции. В то время как extern примененный в этой же единице трансляции будет определять то связывание, которое было задано первоначально.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
// file1.c
static int a = 1;
static int b; // тут 0
int c = 2;
 
extern int a; //можно, но а все еще static
 
//file2.c
 
extern int a; //можно, но линкер будет искать переменную "а" с внешним связыванием
              //если такой нет, то при попытке адресовать ее - будет ошибка линковки.
 
extern int c; // все нормально, найдем переменную "с" в file1
Вот пункт про extern, в котором описано то, что я изложил выше:
6.2.2/4
For an identifier declared with the storage-class specifier extern in a scope in which a
prior declaration of that identifier is visible
, if the prior declaration specifies internal or
external linkage, the linkage of the identifier at the later declaration is the same as the
linkage specified at the prior declaration
. If no prior declaration is visible, or if the prior
declaration specifies no linkage, then the identifier has external linkage.
Так что ничего вы не упускаете. Разве что источник информации не совсем корректный выбрали
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru