Код: Выделить всё
(void)printf("XXX");Между тем, встретился с мнением, что такое "заvoidование" функций корректнее, чем
Код: Выделить всё
printf("XXX");Есть ли все-таки разница? Какой вариант предпочтительнее с точки зрения переносимости?
Модератор: Модераторы разделов
Код: Выделить всё
(void)printf("XXX");Код: Выделить всё
printf("XXX");Наверное, такой же, как в фразах типа(elide @ Вторник, 17 Мая 2005, 21:55) писал(а):а каков сдесь глубинный смысл?
Код: Выделить всё
int a; float b;
...
a=(int)b;(t.t @ Вторник, 17 Мая 2005, 23:38) писал(а):Наверное, такой же, как в фразах типа(elide @ Вторник, 17 Мая 2005, 21:55) писал(а):а каков сдесь глубинный смысл?
Код: Выделить всё
int a; float b; ... a=(int)b;
Я такое частенько встречал.
Ну, это я понимаю(Sparky @ Среда, 18 Мая 2005, 2:22) писал(а):не совсем.... то что ты написал это чистое приведение типа...
Это, собственно, тоже приведение типа, int -> void, наверное по принципу "раз некому результат возвращать, его надо явно завойдить". А то, что я написал, как влияет на переносимость?(Sparky @ Среда, 18 Мая 2005, 2:22) писал(а):от себя замечу, что в (void)printf("xxx") особого смысла не вижу.... на переносимость никак не влияет во всяком случае точно
Код: Выделить всё
#ifdef CONFIG_XXX
static int *x;
static inline int *func(int y)
{
x += y;
return x;
}
#else
#define func(x) (NULL)
#endifКод: Выделить всё
func(1);Код: Выделить всё
(void)func(1);А что, если (void) не указать, то результат, возвёрнутый функцией будет храниться в памяти?(oav @ Среда, 18 Мая 2005, 10:10) писал(а):да все гораздо проще и смысл в этом есть, хоть и не большой данная конструкция просто указывает компилятору что результат работы функции, данный кусок кода совсем себе даже не интересует, а уж компилятор типа может это дело заоптимизировать. Вроде так оно и есть
(fulltick @ Среда, 18 Мая 2005, 10:50) писал(а):Некоторые компиляторы и средства статического анализа кода (типа FlexeLint) могут выводить сообщения о "неиспользуемом возвращаемом значении" для функций. Приведение к void затыкает сильно умные инструменты. Насчет оптимизации - сильно сомневаюсь. Внутри функции компилятор ничего оптимизировать не будет, т.к. эта же функция может использоваться в другом месте. А снаружи функция возвращающая что-то от void-функции отличается только тем, что последняя возвращет в регистре eax мусор. Т.е. тоже оптимизировать нечего.
ну тебе же сказали - шоб у некоторых компиляторов некоторые варнинги не сыпались....в заvoidовании функции я вообще особого смысла не вижу
(fulltick @ Среда, 18 Мая 2005, 11:50) писал(а):Некоторые компиляторы и средства статического анализа кода (типа FlexeLint) могут выводить сообщения о "неиспользуемом возвращаемом значении" для функций. Приведение к void затыкает сильно умные инструменты. Насчет оптимизации - сильно сомневаюсь. Внутри функции компилятор ничего оптимизировать не будет, т.к. эта же функция может использоваться в другом месте. А снаружи функция возвращающая что-то от void-функции отличается только тем, что последняя возвращет в регистре eax мусор. Т.е. тоже оптимизировать нечего.
Ну это как минимум не корректно, так как есть спецификаторы типа передачи значений (входных и выходных) в типе самой функции. Например через стек.
Если функция определена на уровне 1 единицы трансляции то компилятор елементарно можно понять что по-другому эта функция не используется.
(fulltick @ Среда, 18 Мая 2005, 12:37) писал(а):Ну это как минимум не корректно, так как есть спецификаторы типа передачи значений (входных и выходных) в типе самой функции. Например через стек.
Согласен, eax - это частный случай. В любом случае, снаружи функции оптимизировать особо нечего, независимо от того, какой у неё тип компоновки.
Если функция определена на уровне 1 единицы трансляции то компилятор елементарно можно понять что по-другому эта функция не используется.
Для этого функция должна использоваться толькой в той единице трансляции, в которой определена. Причём компилятор может предположить это только в случае, если функция определена как static. Где и как определена printf?
(fulltick @ Среда, 18 Мая 2005, 17:43) писал(а):Век живи, век учись... А если всё-таки функция возвращает значение через регистры?