Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 414
1

Обязательно ли в extern указывать const?

22.08.2014, 01:44. Показов 2443. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему, если так
main.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
 
void foo(void);
 
//char* str = "abc";
char const tmp_obj[] = "abc";   
char* str = &tmp_obj[0];//тут должно быть const char* str = &tmp_obj[0]
 
void main(void){
    foo();
    system("pause");
}
то warning C4090: инициализация: разные квалификаторы "const"


а если так
main.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
 
void foo(void);
 
//char* str = "abc";
char const tmp_obj[] = "abc";   
char* str = &tmp_obj[0];//тут должно быть const char* str = &tmp_obj[0]
 
void main(void){
    foo();
    system("pause");
}
temp.c
C
1
2
3
4
5
6
#include <stdio.h>
 
void foo(void){
    extern char* str;//тут должно быть extern const char* str;
    printf("%s  \n",str);
}
то нормально??
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2014, 01:44
Ответы с готовыми решениями:

Обязательно ли указывать следующую кодировку?
Подскажите, обязательно ли указывать следующее описание на каждой странице сайта &lt;!DOCTYPE html...

Обязательно ли указывать type атрибут в тегах
audio/video

Обязательно указывать в методе Divider именно return 1?
class Number { public bool Prime(int x) { if (x &lt;= 1) return...

Обязательно ли указывать все время родителей для GUI элементов?
Добрый день, интересует такой вопрос, обязательно ли указывать все время родителей для GUI...

6
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
22.08.2014, 02:07 2
Потому что вы в str записываете адрес &tmp_obj[0] стало быть сможете изменить данные по этому адресу, однако их менять нельзя т.к. tmp_obj объявлен как cont, поэтому, что бы обеспечить из сохранность, коспилятор требует и str объявить как cont, что бы гарантировать их целостность.
0
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 414
22.08.2014, 02:45  [ТС] 3
Потому что вы в str записываете адрес &tmp_obj[0] стало быть сможете изменить данные по этому адресу, однако их менять нельзя т.к. tmp_obj объявлен как cont, поэтому, что бы обеспечить из сохранность, коспилятор требует и str объявить как cont, что бы гарантировать их целостность.
понятно, спасибо, а так:
main.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
 
void foo(void);
 
//char* str = "abc";
char const tmp_obj[] = "abc";
const char* str = &tmp_obj[0];
 
void main(void){
    foo();
    system("pause");
}
temp.c
C
1
2
3
4
5
6
#include <stdio.h>
 
void foo(void){
    extern char* str;//тут должно быть const char* str
    printf("%s  \n",str);
}
почему нет ошибок??
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
22.08.2014, 02:56 4
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
почему нет ошибок??
а почему они должны быть?
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
extern char* str;
указывает лишь на то, что в каком-то из файлов есть такая переменная и все
0
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 414
22.08.2014, 03:08  [ТС] 5
указывает лишь на то, что в каком-то из файлов есть такая переменная и все
а то что она с const это не считается??
мы же пишем, что она типа char*, почему мы не должны писать const?
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
22.08.2014, 03:13 6
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
а то что она с const это не считается??
мы же пишем, что она типа char*, почему мы не должны писать const?
It's because const implies internal linkage by default, so your "definition" isn't visible outside of the translation unit where it appears.

Т.е. const работает в пределах файла, в котором определн, а за его пределами он не действует. Я так мыслю.
0
2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 414
22.08.2014, 03:22  [ТС] 7
Т.е. const работает в пределах файла, в котором определн, а за его пределами он не действует. Я так мыслю.
в externe мы обЪявляем для того чтобы линковщик мог у себя в таблицах или где он там ищет точно опознать переменную, для этого нужно имя и тип(потому что может быть 2 переменных с одним именем и разным типом), а квалификатор не обязателен, я так мыслю
0
22.08.2014, 03:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2014, 03:22
Помогаю со студенческими работами здесь

Обязательно ли в c# напротив каждого поля или метода указывать его модификатор доступа?
Например у меня несколько public полей, тогда обязательно ли для каждого писать public или можно...

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ?...

Когда оператор должен быть обязательно членом класса, и когда он обязательно не принадлежит классу?
Нужно узнать случаи, когда оператор функция должна быть обязательно членом класса и случаи, когда...

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

Отрисовка линий движения материальной точки при u_1=const и u_2=const
Добрый день. У меня не получается построить графики движения материальной точки для u_1=const и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru