powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Аргумент функции C
6 сообщений из 6, страница 1 из 1
Аргумент функции C
    #38313314
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);


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

На самом деле тут играют роль две привычки:
1) В C указатель на void всегда приводится в любой другой указатель. В С++ это не так, там надо делать принудительное приведение. Так что для тех кто часто работает С++ кодом (чаще чем с С) принудительное приведение указателей более привычно.
2) GCC проверяет типы параметров для *printf и если передать указатель на void в %s параметр любой функции из printf семейства, то получишь предупреждение. Чтобы его избежать - делают принудительное приведение.
Из комбинации этих двух привычек и родился показанный код.
Смена компилятора здесь совсем ни при чем.
...
Рейтинг: 0 / 0
Аргумент функции C
    #38313517
Фотография акуз-лингвист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlСмена компилятора здесь совсем ни при чем.
ну да. я давно не брал в руки си :)
...
Рейтинг: 0 / 0
Аргумент функции C
    #38314853
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Аргумент функции C
    #38314858
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

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


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