Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Аргумент функции C / 6 сообщений из 6, страница 1 из 1
27.06.2013, 20:57
    #38313314
Prime301
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аргумент функции C
Туториал по GTK
Код: plaintext
1.
2.
3.
4.
5.
6.
static void callback( GtkWidget *widget,
                      gpointer   data )
{
    g_print ("Hello again - %s was pressed\n", (gchar *) data);
//И дальше код
}


Вопрос: зачем писать
Код: plaintext
1.
g_print ("Hello again - %s was pressed\n", (gchar *) data);


Почему не написать
Код: plaintext
1.
g_print ("Hello again - %s was pressed\n", data);


?
...
Рейтинг: 0 / 0
28.06.2013, 05:46
    #38313503
акуз-лингвист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аргумент функции C
явное приведение типа.
в-принципе, если ваш любимый компилятор прекрасно приводит вторым способом, то можно использовать и его.
но на всякий случай (вдруг компилятор сменится) делают первым способом.
...
Рейтинг: 0 / 0
28.06.2013, 06:58
    #38313516
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аргумент функции C
акуз-лингвистявное приведение типа.
в-принципе, если ваш любимый компилятор прекрасно приводит вторым способом, то можно использовать и его.
но на всякий случай (вдруг компилятор сменится) делают первым способом.Это не верный ответ.

На самом деле тут играют роль две привычки:
1) В C указатель на void всегда приводится в любой другой указатель. В С++ это не так, там надо делать принудительное приведение. Так что для тех кто часто работает С++ кодом (чаще чем с С) принудительное приведение указателей более привычно.
2) GCC проверяет типы параметров для *printf и если передать указатель на void в %s параметр любой функции из printf семейства, то получишь предупреждение. Чтобы его избежать - делают принудительное приведение.
Из комбинации этих двух привычек и родился показанный код.
Смена компилятора здесь совсем ни при чем.
...
Рейтинг: 0 / 0
28.06.2013, 07:13
    #38313517
акуз-лингвист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аргумент функции C
White OwlСмена компилятора здесь совсем ни при чем.
ну да. я давно не брал в руки си :)
...
Рейтинг: 0 / 0
29.06.2013, 21:22
    #38314853
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аргумент функции C
Prime301 Туториал по GTK
Код: plaintext
1.
2.
3.
4.
5.
6.
static void callback( GtkWidget *widget,
                      gpointer   data )
{
    g_print ("Hello again - %s was pressed\n", (gchar *) data);
//И дальше код
}


Вопрос: зачем писать
Код: plaintext
1.
g_print ("Hello again - %s was pressed\n", (gchar *) data);


Почему не написать
Код: plaintext
1.
g_print ("Hello again - %s was pressed\n", data);


?

Просто напоминание читающему что это за тип данных. Компилятору и функции все равно. Но кстати gcc возможно и выдает предупреждение без привидения.
...
Рейтинг: 0 / 0
29.06.2013, 21:38
    #38314858
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аргумент функции C
MasterZiv,

С++ тут ни при чем, даже в нем printf — функция с эллипсисом, типов параметров нет, и с++ не знает к какому типу параметры надо приводить.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Аргумент функции C / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]