Дано:
1) gcc от 4.0 до 4.4.1
2) Функцияint iconnect(in_port_t port, in_addr_t ip_address) {
...
инициализации всякие
...
int sock;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(ip_address);
if ( connect(sock, (struct sockaddr *)&addr, sizeof (addr)) ) {
printf("ля - ля - ля\n");
}
Компилю
g++-4.4 server.cpp -ffor-scope -g3 -O2 -ggdb3 -gdwarf-2 -fno-builtin -o server
-fstrict-aliasing -Wstrict-aliasing -Wunused -Wuninitialized -ftree-vrp -Wconversion
-Wall -Wextra -W -Wshadow -fstack-protector -fstack-protector-all -fbounds-check
-fstack-check -fbounds-check -ftrapv -fwrapv -Wformat;
На выходе получаю WARNING
server.cpp:1250: warning: conversion to ‘short unsigned int’ from ‘int’ may alter its value
1250 строка это - addr.sin_port = htons(port);
в <in.h> прописано
/* Type to represent a port. */
typedef uint16_t in_port_t; (он же unsigned short int)
sin_port в структуре sockaddr_in типа in_addr_t
port в аргументе функции типа in_port_t
htons(port) возвращает uint16_t, аргумент у неё типа uint16_t
Откуда singed int взялся???
P.S.
addr.sin_port = (in_addr_t)htons(port); Не помогает.
P.P.S.
in_addr_t это uint32_t он же unsigned int