J'ai couru à travers l'erreur Socket operation on non-socket
dans certains de mon code de réseau lors de l'appel connect
et passé beaucoup de temps à essayer de comprendre ce qui l'a causé. J'ai finalement compris que la ligne de code suivante causait le problème:Erreur "Socket opération sur socket" en raison de la syntaxe étrange
if ((sockfd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol) < 0)) {
Voir le problème? Voici ce que la ligne devrait ressembler à:
if ((sockfd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol)) < 0) {
Ce que je ne comprends pas pourquoi la première ligne incorrecte ne produit pas d'avertissement. Pour mettre une autre manière, ne devrait pas la forme générale:
if (foo = bar() < baz) do_something();
paraître étrange au compilateur, en particulier en cours d'exécution avec g++ -Wall -Wextra
?
Si ce n'est pas le cas, ne devrait-il pas au moins apparaître comme "mauvais style" à cppcheck, que je suis aussi en train de faire dans le cadre de ma compilation?
Quasiment la raison pour laquelle je * haine * "- conditions" assignation ... – ereOn
Je suis avec vous sur celui-là, ereOn. Je déteste aussi l'opérateur de virgule - une fois j'ai eu par mégarde une virgule à la fin d'une addition répartie sur deux lignes physiques, et il a fallu un certain temps pour comprendre pourquoi je recevais des résultats stupides. Ce serait bien s'il y avait des options #pragmas ou compilateur pour désactiver de tels idiomes de C afin que nous puissions éviter de tels problèmes (et avoir l'erreur/avertissement que l'OP voulait). – JTeagle
@JTeagle: Certainement, oui. En fait, la raison pour laquelle le PO n'a pas reçu d'avertissement était vraiment un manque de chance. Vois ma réponse. – ereOn