Ошибка компиляции, связанная с индексом - это действительно функция?

Я удаляю все предупреждения из нашей компиляции и наткнулся на следующее:

предупреждение: адрес `char* index(const char*, int)' всегда будет 'true'

для следующей строки кода:

DEBUG_MSG("Data received from Device "<<(int)_nodeId << "for" << index  <<(int)msgIn.index<<".");

DEBUG_MSG — это один из наших макросов протоколирования, который препроцессор заменяет оператором, выполняющим потоковые операции в стиле C++.

index не объявлен, поэтому я предполагаю, что он должен был читать:

DEBUG_MSG("Data received from Device "<<(int)_nodeId << "for index "  <<(int)msgIn.index<<".");

а index будет функцией* функции "char* index(const char*, int)" в стандартной библиотеке, но что делает функция index? Google кажется бесполезным, так как он подтягивает индексы книг, связанных с C++.

Есть ли что-то, что я упускаю в своей интерпретации этого предупреждения?


person Luciano    schedule 03.06.2009    source источник


Ответы (3)


Вот справочная страница для индекса:

http://kernel.org/doc/man-pages/online/pages/man3/index.3.html

person Michael    schedule 03.06.2009
comment
Спасибо, это подтверждает то, что происходит, и то, что это не то, что предполагал первоначальный пользователь. - person Luciano; 03.06.2009

Предположительно, операторы стрима видят

<< index

И попытка автоматически преобразовать его во что-то, что можно распечатать:

<< (bool)index

Но index — это функция, и ее адрес никогда не будет NULL. Итак, это эквивалентно:

<< true

G++ видит, что это всегда будет верно, и выдает предупреждение.

Что касается индекса, см. http://www.linuxmanpages.com/man3/index.3.php

person bdonlan    schedule 03.06.2009

index — это функция, определенная в <strings.h>, которая устарела и должна заменить на strchr.

person Dario    schedule 03.06.2009