Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Zla9_Kolu4ka
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 409
#1

Обязательно ли в extern указывать const? - C (СИ)

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

Почему, если так
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2014, 01:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обязательно ли в extern указывать const? (C (СИ)):

CONST_RETURN char *__cdecl strstr (const char *_Str, const char *_SubStr) - C (СИ)
#include &lt;stdio.h&gt; #include &lt;string.h&gt; char tracks = { &quot;ya ostavil svoe serdce v harvardskom med univere&quot;, &quot;NewYork New York...

extern - C (СИ)
Всем привет, читал сейчас библиотеку SDL и там встретил такой вот код: extern &quot;C&quot; { //... } Так вот насколько я знаю,...

Спецификатор extern для прототипов функций - C (СИ)
accept, ну видимо хочет человек понять как разбивать сорц на единицы трансляции. Это верно. Nickstery, в header.h перед описанием...

использование extern в си на пример исходников squid - C (СИ)
здравствуйте. из-за некоторых фактов я запутался: возьмём пример с английской вики: file1: int GlobalVariable; // implicit...

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

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

6
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
22.08.2014, 02:07 #2
Потому что вы в str записываете адрес &tmp_obj[0] стало быть сможете изменить данные по этому адресу, однако их менять нельзя т.к. tmp_obj объявлен как cont, поэтому, что бы обеспечить из сохранность, коспилятор требует и str объявить как cont, что бы гарантировать их целостность.
0
Zla9_Kolu4ka
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 409
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
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
22.08.2014, 02:56 #4
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
почему нет ошибок??
а почему они должны быть?
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
extern char* str;
указывает лишь на то, что в каком-то из файлов есть такая переменная и все
0
Zla9_Kolu4ka
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 409
22.08.2014, 03:08  [ТС] #5
указывает лишь на то, что в каком-то из файлов есть такая переменная и все
а то что она с const это не считается??
мы же пишем, что она типа char*, почему мы не должны писать const?
0
some_name
Вежливость-главное оружие
227 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,441
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
Zla9_Kolu4ka
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 409
22.08.2014, 03:22  [ТС] #7
Т.е. const работает в пределах файла, в котором определн, а за его пределами он не действует. Я так мыслю.
в externe мы обЪявляем для того чтобы линковщик мог у себя в таблицах или где он там ищет точно опознать переменную, для этого нужно имя и тип(потому что может быть 2 переменных с одним именем и разным типом), а квалификатор не обязателен, я так мыслю
0
22.08.2014, 03:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 03:22
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru