Вот минимальный пример:Как получить GCC для предупреждения об именах имен идентификаторов?
#include <algorithm>
#include <vector>
using namespace std;
vector<int> count;
int main() {
int(count.size());
return 0;
}
компиляции с
$ \g++ --std=c++0x -ggdb -D_GLIBCXX_DEBUG -W -pipe \
-mmmx -msse -msse2 -msse3 \
-ftrapv -Wall -Wextra \
-Wctor-dtor-privacy -Wlogical-op -Wnoexcept \
-Woverloaded-virtual -Wsign-promo -Wstrict-null-sentinel \
-Wstrict-overflow=5 -Wundef -Weffc++ \
-Wcast-align \
-Wcast-qual -Wchar-subscripts -Wcomment \
-Wconversion \
-Wdisabled-optimization -Wfloat-equal \
-Wformat \
-Wformat=2 -Wformat-nonliteral -Wformat-security \
-Wformat-y2k -Wimport -Winit-self -Winline \
-Winvalid-pch -Wunsafe-loop-optimizations \
-Wmissing-braces -Wmissing-field-initializers \
-Wmissing-format-attribute -Wmissing-include-dirs \
-Wmissing-noreturn -Wpacked -Wpadded \
-Wpointer-arith \
-Wredundant-decls -Wreturn-type -Wsequence-point \
-Wshadow \
-Wsign-compare -Wstack-protector \
-Wstrict-aliasing \
-Wstrict-aliasing=2 -Wswitch -Wswitch-default \
-Wswitch-enum -Wtrigraphs -Wuninitialized \
-Wunknown-pragmas -Wunreachable-code \
-Wvolatile-register-var -Wwrite-strings -Wunused-parameter \
-Wno-parentheses d.cpp
т.е. большинство предупреждающих флагов, которые я получил от какого-то другого вопроса, я получаю:
d.cpp: In function 'int main()':
d.cpp:7:5: error: expected primary-expression before 'int'
int(count.size());
^
d.cpp:7:5: error: expected ';' before 'int'
Status 1
Ясно , он запутался, потому что count
объявлен в <algorithm>
. Но сообщение об ошибке не показывает этого.
Было бы замечательно, если бы было предупреждение о том, что вектор имеет то же имя, что и функция. Есть ли такое предупреждение?
Удаление using namespace std;
устраняет проблему, но есть ли предупреждение, которое все еще работает в присутствии using namespace std;
? Все, что нужно сделать, это следить за символами в текущем контексте, которые уже выполняются компиляторами, и выдать предупреждение, если оператор тени или переопределяет его. Похоже на простую функцию, я не могу поверить, что она этого уже не делает.
Если удаление директивы 'abusing namespace' решает проблему, удалите ее. В любом случае, это приносит больше вреда, чем пользы. –
Ну, это то, что вы получаете для импорта нескольких вещей в одно и то же пространство имен. Вот почему использование пространства имен обычно не рекомендуется. – PlasmaHH
Нет, мне нужно это, чтобы иметь возможность печатать быстрее. @PlasmaHH Вы уверены, что в этом причина? Для меня это не слишком сильная причина. –