Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NULL не работает 
:(
    Опции темы
GQU
Дата 16.8.2014, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



А почему warning выдает, я просто подставил заместо NULL, то что подставляет препроцессор??

Код

#include <stdio.h>
#include <stdlib.h>

int* p1 = ((void *)0);//((void *)0)-это NULL в директивах препроцессора
    system("pause");
    return 0;
}


Код

/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

PM MAIL   Вверх
Фантом
Дата 17.8.2014, 11:31 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Если код в таком виде и написан, то странно, что выдается только предупреждение. Хоть какую-нибудь функцию надо было бы открыть.  smile 
PM   Вверх
GQU
Дата 17.8.2014, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Цитата

Если код в таком виде и написан, то странно, что выдается только предупреждение. Хоть какую-нибудь функцию надо было бы открыть
 smile 

Ну я опечатался, все равно предупреждение, значение типа *void, нельзя использовать для инициализации сущностей типа *int, а после того как препроцессор подставит эти ((void *)0) значения заместо NULL, то нет warning-ов?? Почему так?
Код

#include <stdio.h>
#include <stdlib.h>
void main(void){
int* p1 = ((void *)0);
    system("pause");
}


Это сообщение отредактировал(а) GQU - 17.8.2014, 23:46
PM MAIL   Вверх
Фантом
Дата 18.8.2014, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Ну, начнем с того, что компиляторы C ничего и не выдают. А вот если попытаться скомпилировать этот код на C с помощью компилятора языка C++, то действительно возникнут проблемы из-за несоответствия типов указателей (а заодно и из-за void main(...)) .

Фокус в том, что C и C++ - разные языки. Попытка таким образом подставить определение NULL из языка C в программу на C++, вообще говоря, должно приводить к ошибке. Но она настолько часто встречается, что компиляторы ограничиваются выдачей предупреждения (или, что тоже встречается, переопределяют NULL как 0). В С++, начиная со стандарта C++09, есть предопределенный пустой указатель nullptr, которым и следует в этом случае пользоваться.

Общая же мораль такова: определитесь, каким из двух языков Вы пользуетесь. И смените либо используемые языковые конструкции, либо компилятор. Проблема, с которой Вы столкнулись - не самая большая неприятность, на которую можно нарваться, пытаясь скрещивать ежа с ужом.
PM   Вверх
GQU
Дата 21.8.2014, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



вот, warninga нет, есть такое предупреждение и это программа на си, а не на си++,
кстате почему не выдается warning?

Это сообщение отредактировал(а) GQU - 21.8.2014, 01:55

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  си.png 62,08 Kb
PM MAIL   Вверх
Фантом
Дата 23.8.2014, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(GQU @  21.8.2014,  02:50 Найти цитируемый пост)
вот, warninga нет, есть такое предупреждение и это программа на си, а не на си++,
кстате почему не выдается warning?


Warning'а нет, поскольку это действительно C, а предупреждение выдает среда разработки, которая "по умолчанию" считает все написанным на C++.

P.S. Это в предположении достаточной разумности MSVS, каковая имеет место быть далеко не всегда.  smile Честно говоря, компиляторы/среды разработки от MS не самым лучшим образом подходят для проверки тонкостей соблюдения языковых стандартов.
PM   Вверх
feodorv
Дата 23.8.2014, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Фантом @  23.8.2014,  13:40 Найти цитируемый пост)
которая "по умолчанию" считает все написанным на C++.

И наверняка расширение файла исходного кода - .cpp


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
sQu1rr
Дата 23.8.2014, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 597
Регистрация: 11.11.2008
Где: london

Репутация: 3
Всего: 13



Цитата(feodorv @  23.8.2014,  22:30 Найти цитируемый пост)
И наверняка расширение файла исходного кода - .cpp 

а что годать, скрин то выложен, называется main.c smile
PM MAIL Skype GTalk   Вверх
GQU
Дата 24.8.2014, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Цитата

Warning'а нет, поскольку это действительно C, а предупреждение выдает среда разработки, которая "по умолчанию" считает все написанным на C++

спс, буду знать
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1057 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.