Ошибка компиляции, связанная с «index» - это на самом деле функция? - PullRequest
0 голосов
/ 03 июня 2009

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

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

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

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

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

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

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

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

Что-то мне не хватает в моей интерпретации этого предупреждения?

Ответы [ 3 ]

3 голосов
/ 03 июня 2009

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

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

1 голос
/ 03 июня 2009

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

<< index

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

<< (bool)index

Но index - это функция, которая имеет адрес, который никогда не будет NULL. Так что это эквивалентно:

<< true

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

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

0 голосов
/ 03 июня 2009

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

...