Recommended Posts
-
- Share
Hey, so I bought this tool off someone, and when I try running the exe I get this error :
AutoIt Error Line -1 Error Variable used without being declared.
weird thing is, it seems to work with everyone else, I also tested it on my windows server 2003 VPS and it worked fine, it only shows that error on my PC.
What could be the problem?
Link to post
Share on other sites
-
- Share
Hi booz,
1st Welcome to the AutoIt Forums!
Some of the following tips may not apply to you, but it may make your life a bit easier here on the forum in the future.
CODE
- Did you know that we have an awesome search feature?
You can find many answers to your current questions, just by typing in the right search patterns.
- A suggestion is to use the Advanced Search mode:
- Type your specific search term in quotes.
- Click the forum you want to search in (the one most likely to have your information would generally be the Example Script forum and or the General Help and Support Forum).
- Click on «Search titles only» radio button.
- Click perform search.
The above will help you narrow down your searches and prevent you from unneccesarily posting a new thread.
[*]Also, you should try to read the Sticky posts that are at the top of each of the AutoIt Forums you enter such as:
- FAQs (Frequently Asked Questions)
- Are my AutoIt EXEs really infected? (About false positives and what to do if you may encounter one)
[*]Keep in mind, the help file will be your best friend, however you may find some of the tutorials written by some of our elite forum members helpful.
- Valuaters Interactive AutoIt 1-2-3 tutorial
- LxPs Learning to script with AutoIt3
[*]Forum Etiquette:
- Making a new thread:
- Use the Search feature first to see if your question has already been answered.
- Look in the help file as well before even thinking of posting (When what you want could be obtained by simply reading the help file, you don’t generally get a good response from your AutoIt community).
- Titles are very important here. 1 word titles or titles like «help me», «write something for me», «I’m a noob» etc… aren’t tolerated.
- Make sure you are posting in the correct forum:
- General Help and Support:
- This forum is for AutoIt related support questions only. If you have a question related to another language, or nothing at all to do with AutoIt then you need to post in the chat forum, or in that languages perspective forum.
- Example Script:
- This forum is for AutoIt scripts/executables only.
- Source code is preferred but not necessary, you do have the right to just post the binary of your project if you wish.
- Please don’t post questions in this forum unless it’s directly related to a thread already existing.
- General Help and Support:
- Use common sense when creating a new thread.
Ask yourself if the title is descriptive enough to even interest someone (preferably those that know what they are talking about) to even look at your thread, let alone reply in it.
- Think about how it would show in the search feature if someone were to look for something just like you are looking for (think of the keywords you used yourself and obviously didn’t find anything (because we know you used the search feature
) and use those types of keywords in your title as well).
- Thread content:
- Be descriptive with your query. (Make sure we actually know what you want to do).
- Show you’ve made an effort in coding what you want (provide the reproducer code (generally no more than 50 lines as people lose interest in debugging someones script for free)).
- Don’t talk in ebonics. A lot of the forum members are adults, and a lot of them know how to help you, but talk like a child, you’ll be treated as such.
- Don’t ask for help making keyloggers, spam (even if it’s to do as a prank), or anything that can be thought of as malicious. You’ll more than likely have the thread locked by a moderator, and take a bashing from your fellow AutoIt community.
- When posting code, use code boxes. This can be accomplished by using [code ]<content here>[/code ] (No spaces between the brackets []).
Using code boxes will keep the indentation and make it easier to read for others to help you.
- Bumping your threads:
- Use common courtesy here.
Keep in mind every time you bump your thread to the top of the forum, you knock the other threads down a notch.
Everyone posting for help has just as much right for their threads to get read as you do.
Because of that, do not bump your post more than once in a 24 hour period.
A Bump is simply posting in your thread with nothing that pertains to your query with the sole purpose of moving it up.
Deleting previous bumps, and posting new ones is not tolerated, and the moderators can find those deletions, so do yourself a favor and don’t cross that line >_< .
- Use common courtesy here.
- Rude or obnoxious content:
This falls pretty much under the common sense thing. If you use it (common sense) before posting, you won’t have issues.
- Don’t use foul language, remember, a lot of the community is at work when they read these threads.
- Don’t provoke or instigate an argument with someone.
- Double Posting:
- It’s understood that sometimes there’s a lag in the system, and sometimes people don’t see their post go up right aways so they post again.
If this happens to you, simply notify a moderator with the report feature in the post, and politely ask them to delete it.
- If you’re just creating another topic because your original topic is not being answered the way you want or at all, this is not tolerated. You could lose your posting privileges all together over it.
- It’s understood that sometimes there’s a lag in the system, and sometimes people don’t see their post go up right aways so they post again.
- Non-English languages
- If English is not your primary language, please make an attempt to interpret (yourself or online) and post that interpretation.
We have wonderful users from around the world, so after you’ve done your post in English, back it up with your question also in your native tongue (You may find your answer much quicker using both).
- If English is not your primary language, please make an attempt to interpret (yourself or online) and post that interpretation.
That’s it for now, I hope you have a wonderful learning experience, and hope to see you contribute to the community as your knowledge grows.
Link to post
Share on other sites
-
- Share
What OS are you using? If you’re running Vista try running as admin and under compatibility for WinXp SP2.
Link to post
Share on other sites
- Author
-
- Share
What OS are you using? If you’re running Vista try running as admin and under compatibility for WinXp SP2.
nope, I’m on XP sp2.
Link to post
Share on other sites
-
- Share
Hi & welcome to the forums!
Bought what tool, AutoIt is free!
It’s impossible to tell why you get that message if you don’t show any code, we are not mind-readers here
Link to post
Share on other sites
- Author
-
- Share
Hi & welcome to the forums!
Bought what tool, AutoIt is free!
It’s impossible to tell why you get that message if you don’t show any code, we are not mind-readers here >_<
haha, that’s the thing, I don’t have the code, just the exe file. it worked for everyone else, it also worked on my VPS (windows server 2003), but on my PC…it refuses it run, I googled it and no one has had this problem before, is my PC unique or something.
Link to post
Share on other sites
- Moderators
- Moderators
-
- Share
How do you serious expect us to diagnose an issue without the source code?
Common sense plays a role in the basics of understanding AutoIt… If you’re lacking in that, do us all a favor, and step away from the computer.
Link to post
Share on other sites
- Author
-
- Share
How do you serious expect us to diagnose an issue without the source code?
It shouldn’t be a source code problem as the EXACT same file is working fine on everyones else PCs and my VPS and vmware, so there’s no way the problem is in the source code, it’s probably just my PC, maybe I’m missing windows updates or something?
Link to post
Share on other sites
-
- Share
What exactly does this tool do? AdmiralAlkex asked this and you didn’t answer. There’s a slim chance we may be able to help you if we know what it is.
Edited September 21, 2008 by dbzfanatic
Link to post
Share on other sites
- Author
-
- Share
What exactly does this tool do? AdmiralAlek asked this and you didn’t answer. There’s a slim chance we may be able to help you if we know what it is.
ah sorry, didn’t read that..it’s 2am here. the tool is a file parser, it gets info from an EXE file(strings/data) .
Edited September 21, 2008 by booz
Link to post
Share on other sites
-
- Share
Is the author someone that is on the forums here? I hope you didn’t pay much for this tool as from your description it seems like it’s a very simple program.
Link to post
Share on other sites
- Author
-
- Share
Is the author someone that is on the forums here? I hope you didn’t pay much for this tool as from your description it seems like it’s a very simple program.
Nah I don’t think that he’s on the forums, and I payed $5 for that tool , needed something like that at the time. it’s really strange that it doesn’t work ONLY on my pc, I copied the exact same file to my VPS and it worked, tons of other people bought it from him..and not one complained about it not working.
Link to post
Share on other sites
- Moderators
- Moderators
-
- Share
It shouldn’t be a source code problem as the EXACT same file is working fine on everyones else PCs and my VPS and vmware, so there’s no way the problem is in the source code, it’s probably just my PC, maybe I’m missing windows updates or something?
I’m not sure where you feel you’re qualified to state that the source code shouldn’t be necessary. The fact that you did a google is impressive, but the fact that you didn’t find the error says nothing.
The variable not being displayed is because of it not being written correctly in some section of the code. Upload at least the executable. Or I’ll have to close this topic, as it can go absolutely no where with nothing but guesses with infinite possibilities.
Common sense plays a role in the basics of understanding AutoIt… If you’re lacking in that, do us all a favor, and step away from the computer.
Link to post
Share on other sites
- Author
-
- Share
You paid for it, so contact «someone» to support you.
oh I did, he had two replys. first one was «I have no idea» , second one was «No refund», so I want to at least fix it so I can use what I paid for.
Link to post
Share on other sites
- Author
-
- Share
I’m not sure where you feel you’re qualified to state that the source code shouldn’t be necessary. The fact that you did a google is impressive, but the fact that you didn’t find the error says nothing.
The variable not being displayed is because of it not being written correctly in some section of the code. Upload at least the executable. Or I’ll have to close this topic, as it can go absolutely no where with nothing but guesses with infinite possibilities.
ok, you can close the topic then, sorry for wasting your time. I thought there was a specific software requirement for autoIT and that why it wasn’t working, but looks like that isn’t the case, oh well.
Link to post
Share on other sites
This topic is now closed to further replies.
-
#1
понятно что это переменная вызывается но не обьявленна.
так вот как узнать какая именно?
ну окошко выскакивает а какую искать?
хорошо если код не большой то можно искать, а если пару тыс строк то уже и затруднительно.
я то чисто случайно нашел но это чисто случайно.
а осмысленно можно узнать какая именно?
подскажите пожалуйста.
-
#2
D:Projectvalue.au3 (1) : ==> Variable used without being declared.:
ConsoleWrite($Value)
ConsoleWrite(^ ERROR
И, что тут непонятного? :blink:
Добавлено:
Сообщение автоматически объединено: 7 Дек 2011
agikon [?]
Когда программист пишет пару тысяч строк, такая ошибка как объявление переменной у него не должна вызывать затруднения.
-
#3
Garrett
хоть убей не понял куда это писать и куда потом смотреть в случае ошибки?
$Value это уже известная переменная.
а если переменных много, то тогда каждую переменную писать в ConsoleWrite ?
а я ж говорю окошко выскакивает и там ничего конкретно не написано.
кстати ошибка может появлятся не при запуске скрипта, а во время работы когда идёт считывание ошибочной переменной.
-
#4
agikon
В примере выше, красным помечено:
D:Projectvalue.au3 (1) : ==> Variable used without being declared.:
номер строки, где обнаружена ошибка
имя переменной
указатель на позицию в строке
Смотреть всё это в консоли SciTE.
agikon [?]
а если переменных много, то тогда каждую переменную писать в ConsoleWrite ?
Нет, это только пример.
Скриншот, пожалуйста, в студию.
-
#5
Garrett [?]
Скриншот, пожалуйста, в студию.
ТС говорит наверное про уже скомпилированный скрипт.
-
#6
ТС говорит наверное про уже скомпилированный скрипт.
Даже там пишут номер строки, где обнаружена ошибка.
-
#7
единственно что понял. что эт онадо нажать F5 и смотреть в консоли скайти, это я понял.
но что всё остальное непонятно.
Garrett
если в скрипте например 20 переменных то что тогда?
каждую писать
ConsoleWrite($1)
ConsoleWrite($2)
ConsoleWrite($3)
…
и что такое value.au3 ? это инклуд который ошибки показывает? у меня в папке инклудов такого нет. где его скачать можно подскажите пожалуйста.
Zaramot:Даже там пишут номер строки, где обнаружена ошибка.
да пишет только такой строки нет вообще в скрипте.
kaster
Мой Аватар, он лучший самый
-
#8
Zaramot [?]
Даже там пишут номер строки, где обнаружена ошибка.
только там нумерация друга, если подключены библиотеки.
-
#9
по пунктам пожалуйста можете написать что куда вписывать чтобы показывало какая переменная ошибку выдаёт?
-
#10
agikon [?]
по пунктам пожалуйста можете написать что куда вписывать чтобы показывало какая переменная ошибку выдаёт?
Загрузите свой скрипт в SciTE и нажмите Ctrl+F5
В консоли всё увидите.
-
#11
а как загрузить в SciTE?
у меня при компиляции компилирует скайти, это не одно и то же?
под «загрузить в скайти» что имеете в виду? как загрузить в скайти?
а вообще нажимаю Ctrl+F5 и в консоли несколько строк появляется и всё. сам скрипт не запускается.
-
#12
agikon [?]
под «загрузить в скайти» что имеете в виду?
Открыть документ, с расширением AU3 (скрипт) в SciTE
-
#13
ну у меня все скрипты открываются в скайти, нажимаю Ctrl+F5 и в консоли несколько строк появляется и всё. сам скрипт не запускается.
вы же поймите скрипт запускается с некими параметрами которые считываются с ини-файла, а если я запускаю через скайти то наверно файл инициализации не обрабатывается.
-
#14
agikon [?]
ну у меня все скрипты открываются в скайти, нажимаю Ctrl+F5 и в консоли несколько строк появляется и всё. сам скрипт не запускается.
Он и не должен запускаться. Запускается проверка синтаксиса, где вы и можете посмотреть, какие ошибки допущены в написание кода.
-
#15
так при компиляции варнингов то и нет.
ошибка появляется когда скрипт работает и когда код с ошибочной переменной обрататывается, только тогда скрипт ошибку выдаёт.
вот я ж и говорю как в окне с ошибкой «Variable used without being declared» понять какая переменная вызвала эту ошибку?
если код то указывается, но например в скрипте 1000 строк, то код например 1624.
вот в чём вся суть вопроса.
-
#16
agikon [?]
так при компиляции варнингов то и нет.
А кто говорит, что они есть? :blink:
-
#17
agikon [?]
вы же поймите скрипт запускается с некими параметрами которые считываются с ини-файла
скрипт не скомпилированный тоже читает из ini-файла. Ищи ошибку тестируя нескомпилированный скрипт.
-
#18
ошибку я не могу найти потому что не указывает на строку ошибки.
оно то пишет что проблема в переменной но какой хз.
-
#19
agikon
Выложите ваш скрипт.
-
#20
agikon
Или скрин сообщения ошибки.
Was hoping someone might be able to help me out with this. I am running into an error, and the very first one i’ve ever had with rvm integrator i might add, anyways. i must note that the only differences between this time and the last time is last time i used 2.0.7, this time it’s 2.0.7a, and all the update packs are the same, except i added these two:
otherwise it’s identical.
i was just about to try it another time, without the two new addons, but still with 2.0.7a. and I thought maybe i’d post and see if anyone had seen this before (couldn’t find anything searching)
huh.. well this is odd.
i did that procedure twice (above) and it failed twice exactly the same way.
then i did Multi_Siginet_MultiTheme-AddonsPack_1.7.cab & Kels_Brushed_Inspirat_v1.cab
that worked, then i did the rest.
odd that they didn’t all work together, but worked seperatly.
also another thats odd. the first two times i just pressed ctrl + a to select all of the addons, but for some reason (and you can see in the log) Kels_Brushed_Inspirat_v1.cab doesn’t show up in the popup screen (when you choose your *.cab files) *.* in the box, and the file shows up.
anyways i guess its working, if i do these things seperately.
3.19: Запрещается. Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, «Помогите!», «HELP!», «У меня проблема»). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный и напишите об этом в теме.
——-
“Сделай так просто, как возможно, но не проще этого.”. “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”
Источник
Майнкрафт ошибка variable used without being declared
Современные компиляторы обладают огромным количеством диагностик. И удивительно, что очень малая их часть включена по умолчанию.
Огромное количество претензий, которые предъявляют к языку C++ в этих ваших интернетах, — про сложность, небезопасность, стрельбу по ногам и т.п., — относятся как раз к тем случаям, когда люди просто не знают о том, что можно решить эти проблемы лёгким движением пальцев по клавиатуре.
Давайте же исправим эту вопиющую несправедливость, и прольём свет истины на возможности компилятора по предотвращению ошибок.
Нужно больше предупреждений
Но и это ещё не всё. Есть несколько флагов, которые почему-то не входят ни в один из «аргегаторов», но крайне важны и полезны.
-Wctor-dtor-privacy
Предупреждает о том, что класс выглядит неиспользуемым, потому что конструкторы и деструкторы закрыты, а друзей и открытых статических функций-членов у него нет.
Аналогично, сообщает, что у класса есть закрытые функции-члены, а открытых нет ни одной.
-Wnon-virtual-dtor
Предупреждает о том, что у класса есть виртуальные функции-члены, но деструктор при этом не виртуальный. Очень сложно представить себе такой класс. Вероятнее всего, это ошибка.
-Wold-style-cast
Предупреждает о приведении типов в стиле языка C. В плюсах есть прекрасные и ужасные static_cast , dynamic_cast , reinterpret_cast и const_cast , которые более локальны и более описательны. Сишный способ слишком сильный и — о, ужас, — небезопасный. Лучше его не использовать вообще.
-Woverloaded-virtual
Предупреждает о попытке в классе-наследнике перегрузить виртуальную функцию базового класса:
-Wsign-promo
Крайне полезный флаг. Предупреждает о неочевидном выборе перегруженной функции:
Вероятнее всего, хотели-таки позвать вторую перегрузку, а не первую. А если всё-таки первую, то будьте любезны сказать об этом явно.
-Wduplicated-branches
Предупреждает о том, что ветви if и else одинаковы:
Условный оператор ?: также под прицелом:
Для меня абсолютная загадка, почему этот флаг не включён не то, что в -Wall , а вообще по умолчанию.
-Wduplicated-cond
Предупреждает об одинаковых условиях в цепочках if-else-if :
-Wfloat-equal
Предупреждает о проверке на равенство между двумя числами с плавающей точкой. Скорее всего, это ошибка, и сравнение нужно проводить с заданной точностью.
Если же требуется именно сравнить на равенство (такое редко, но бывает), то можно использовать std::equal_to , который под предупреждение не попадает.
-Wshadow=compatible-local
Полезная опция, которая не даёт перекрыть локальную переменную другой локальной переменной при условии, что они имеют совместимые типы.
-Wcast-qual
Предупреждает о преобразовании указателя, при котором сбрасываются квалификаторы. Например, чтобы случайно не потерять const .
-Wconversion
Очень, очень, очень важный флаг. Он предупреждает об огромном количестве неявных сужающих (то есть потенциально приводящих к потере информации) преобразований, которые могут быть следствием ошибки программиста. Например:
Если вы раньше никогда не включали этот флаг, то будет интересно.
-Wzero-as-null-pointer-constant
Предупреждает об использовании целочисленного нуля вместо nullptr .
Флаг для педантов. Сообщает о лишней точке с запятой после определения функции-члена.
-Wsign-conversion
Как и -Wconversion помогает предотвратить большое количество неявных преобразований, которые запросто могут быть ошибками:
-Wlogical-op
Предупреждает о подозрительных логических выражениях. Например, когда вместо побитового «И» поставили логическое «И», или логическое выражение имеет одинаковые операнды:
«Агрегатор» дополнительных предупреждений. Включает много интересного, чего нет в -Wall (как и в случае с -Wall , рассмотрены будут не все возможности).
-Wempty-body
Предупреждает о пустом теле условных выражений или цикла do-while . Чаще всего это говорит об опечатке, меняющей логику программы:
-Wimplicit-fallthrough
Предупреждает о «проваливании» в операторе switch :
Компилятор предполагает, что программист забыл break , и case 2 не должен проваливаться:
В C++17 для обозначения явного намерения появился специальный атрибут — fallthrough :
-Wmissing-field-initializers
Предупреждает о том, что отдельные члены структуры не были проинициализированы. Скорее всего это просто забыли сделать:
-Wredundant-move
Предупреждает о ненужном вызове std::move в случаях, когда компилятор сам сделает всё, что нужно:
-Wtype-limits
Предупреждает о сравнениях, которые всегда имеют один и тот же результат. Например, когда беззнаковое число проверяется на неотрицательность. Если программист делает такую проверку, то, видимо, предполагает, что число в теории может быть отрицательным, однако, это не так. Видимо, он где-то ошибся:
-Wshift-negative-value
Предупреждает об операциях сдвига для отрицательных значений. Отрицательными могут быть только знаковые числа, а для них это некорректно:
-Wunused-parameter
Предупреждает о неиспользуемом параметре функции. Возможно, про него просто забыли, и в этом случае функция может работать некорректно.
В C++17 для явного выражения намерения существует атрибут maybe_unused :
-Wunused-but-set-parameter
Предупреждает о том, что в параметр функции было записано значение, но после этого он ни разу не использовался. Возможно, про него снова забыли:
Ода компилятору
Компилятор – лучший друг плюсовика. Компилятор — это не просто транслятор формального человекочитаемого языка в машинные коды. Компилятор — лучший помощник в написании программ.
Важная (и не единственная) помощь, которую оказывает компилятор — поиск ошибок. И я говорю не об опечатках, несовпадении типов и прочих синтаксических ошибках. Я говорю об огромном наборе ошибок, которые можно выловить с помощью механизма предупреждений.
Часто встречаю мнение о том, что предупреждений слишком много, они дают ложноположительные результаты, мешают работать, замыливают глаз, отвлекают от «настоящих» ошибок и т.п. Такое действительно бывает, но это большая редкость.
Большинство предупреждений — это не «бзик» компилятора, который можно просто проигнорировать. Предупреждение — это потенциальная ошибка. Предупреждение — это сигнал от компилятора о том, что написано одно, а требуется, возможно, что-то совершенно иное.
Далее я расскажу о наиболее важных на мой взгляд предупреждениях и покажу, какие ошибки можно отловить с их помощью.
Надеюсь, что данное не слишком занимательное чтиво поможет правильно поставить запятую в заголовке этого раздела.
Сразу хочу оговориться, что далее речь пойдёт исключительно о языке C++ и компиляторе GCC (впрочем, подавляющая часть информации актуальна и для компилятора Clang). Информацию о других компиляторах и языках придётся искать в соответствующих справочниках.
-Wall — это «агрегатор» базовых предупреждений. В языке C++ он включает в себя длинный перечень предупреждений, каждое из которых будет рассмотрено отдельно (на самом деле, рассмотрены будут не все, а только те, которые непосредственно помогают выявлять ошибки).
Несмотря на название, этот флаг включает далеко не все предупреждения, которые умеет обнаруживать компилятор.
-Waddress
Предупреждает о странной работе с адресами. Например, об использовании адреса функции в условном выражении. Такое может произойти, если забыть поставить скобки после имени функции:
Также этот флаг может спасти от типичной ошибки новичка — сравнения строкового литерала с адресом. Очевидно, программист хотел сравнить строки, но в результате сравнил два указателя:
-Warray-bounds=1
Предупреждает о выходе за пределы массивов. Используется только вместе с -O2 .
-Wbool-compare
Предупреждает о сравнении булева выражения с целым числом, которое нельзя трактовать как булево:
-Wbool-operation
Предупреждает о подозрительных операциях с булевыми выражениями. Например, о побитовом отрицании:
Что касается инкрементов и декрементов булевых переменных, то в C++17 это просто ошибки, безо всяких предупреждений.
-Wcatch-value
Предупреждает о обработчиках исключений, которые принимают полиморфные объекты по значению:
Есть и более сильные версии предупреждения: -Wcatch-value=n (см. справку к компилятору).
-Wchar-subscripts
Предупреждает об обращении к массиву по индексу, тип которого char . А ведь char является знаковым на многих машинах:
Предупреждает о наличии последовательности, начинающей новый комментарий ( /* ), внутри многострочного комментария, либо о разрыве строки при помощи обратного слеша внутри однострочного комментария.
-Wint-in-bool-context
Предупреждает о подозрительном использовании целых чисел там, где ожидаются булевы выражения, например, в условных выражениях:
Другой пример — операции побитового сдвига в булевом контексте. Вполне вероятно, что здесь произошла опечатка, и имелся в виду не сдвиг, а сравнение:
А также сообщает о любых видах умножения в булевом контексте.
-Winit-self
Предупреждает об инициализации переменных самими сабями. Используется только вместе с флагом -Wuninitialized .
-Wlogical-not-parentheses
Предупреждает об использовании логического отрицания в левой части сравнения. При этом если правая часть сравнения является сама по себе булевым выражением, то предупреждения не будет.
Используется для того, чтобы отлавливать подозрительные конструкции вроде следующей:
Традиционный способ сообщить компилятору, что так и было задумано — поставить скобки, о чём и сообщает компилятор.
-Wmaybe-uninitialized
Предупреждает о том, что существует возможность использования непроинициализированной переменной.
В данном конкретном случае решается с помощью конструкции default :
-Wmemset-elt-size
Предупреждает о подозрительных вызовах функции memset , когда первый аргумент — это массив, а третий аргумент — количество элементов в массиве, но не количество байт, занимаемой этим массивом в памяти.
-Wmemset-transposed-args
Предупреждает о том, что пользователь, вероятно, перепутал порядок аргументов в функции memset :
-Wmisleading-indentation
Предупреждает о том, что отступы в коде не отражают структуру этого кода. Особенно это актуально для конструкций if , else , while и for . Пример:
-Wmissing-attributes
Предупреждает о ситуации, когда специализация шаблона объявлена не с тем же списком атрибутов, что и оригинальный шаблон.
-Wmultistatement-macros
Предупреждает о макросах, состоящих из нескольких инструкций, и используемых в выражениях if , else , while и for . В такой ситуации под действие выражений попадает только первая инструкция макроса, и это, вероятно, ошибка:
-Wnonnull
Предупреждает о передаче нулевого указателя в функцию, аргументы которой помечены атрибутом nonnull .
-Wnonnull-compare
Предупреждает о сравнении с нулём аргумента функции, помеченного атрибутом nonnull .
-Wparentheses
Типичный случай — опечатались, и вместо равенства написали присвоение:
Компилятор, естественно, сомневается:
Либо исправляем код, либо убеждаем компилятор в том, что мы хотели именно присвоение:
-Wpessimizing-move
Иногда явная попытка переноса может ухудшить производительность. Пример:
-Wreorder
Предупреждает о том, что порядок инициализации членов класса не соответствует порядку их объявления. Поскольку компилятор может переупорядочить инициализацию этих членов, результат может быть неочевидным.
-Wreturn-type
Предупреждает о том, что из функции не вернули заявленный результат:
-Wsequence-point
Сообщает о подозрительных операциях относительно точек следования. Любимый пример (никогда так не делайте):
-Wsign-compare
Одно из важнейших предупреждений. Сообщает о сравнении знаковых и беззнаковых чисел, которое может произвести некорректный результат из-за неявных преобразований. К примеру, отрицательное знаковое число неявно приводится к беззнаковому и внезапно становится положительным:
-Wsizeof-pointer-div
Предупреждает о подозрительном делении друг на друга двух результатов выражения sizeof , когда размер указателя делится на размер объекта. Обычно это бывает, когда пытаются вычислить размер массива, но вместо массива по ошибке берут указатель:
-Wsizeof-pointer-memaccess
Предупреждает о подозрительных параметрах, передаваемых в строковые функции и функции для работы с памятью ( str. , mem. и т.п.), и использующих оператор sizeof . Например:
-Wstrict-aliasing
Каламбур типизации (strict aliasing) — это отдельная большая тема для разговора. Предлагаю читателю найти литературу по этой теме самостоятельно.
В общем, это тоже крайне полезное предупреждение.
-Wswitch
Предупреждает о том, что не все элементы перечисления задействованы в конструкции switch :
-Wtautological-compare
Предупреждает о бессмысленном сравнении переменной с самой собой:
Кроме того, сообщает о сравнениях при участии битовых операций, которые имеют всегда один и тот же результат (всегда истинно или всегда ложно):
-Wtrigraphs
Предупреждает о наличии триграфов, которые могут изменить смысл программы. Не сообщается о триграфах в теле комментария, за исключением случаев, когда триграф трактуется как перевод строки.
-Wuninitialized
Предупреждает об использовании переменных и членов класса, которые не были проинициализированы:
-Wunused-function
Предупреждает о том, что статическая функция объявлена, но не определена, либо о том, что статическая функция, не помеченная как inline , не используется.
-Wunused-variable
Предупреждает о том, что переменная не используется.
Для того, чтобы помочь компилятору понять, что так и задумывалось, можно использовать конструкцию static_cast (. ) :
Заключение
Резюмируя, для компилятора GCC (Clang кое-что из этого не умеет, к сожалению) я рекомендую включать следующий минимальный набор флагов, по необходимости дополняя его более сложными диагностиками.
Да, такой список флагов может породить большое количество ошибок, которые поначалу могут показаться излишними. Но явное лучше неявного. Если знаешь, что делаешь — делай. Но делай это так, чтобы всем было понятно, что именно так ты и хотел. Поработав таким образом хотя бы неделю, вы поймёте, насколько это прекрасно, и уже не сможете вернуться обратно.
1)То что автор не я можно догадаться.(Понимаю здесь работают не гадалки, но всё же)
Скажи что тебе даст воспроизведение ошибки, и как ты это получишь.
и я сделаю всё сам, и дам тебе инфу нужную.
Всю черновую работу можете поручить мне, главное скажите что делать.
2)А почему кнопка паузы не работает не известно?
3)Автор какой-то немец( я только изменил его немного) и контактов свои не оставил.
AZJIO
Меценат
biko3
Пишет что переменные не декларированы, попробуй декларировать.
И попробуй использовать скрипт не скомпилированным. Тогда даст точную строку ошибки.
-Wpedantic
-Wall и -Wextra — это не всё, на что способен компилятор.
В дополнение к ним существует флаг -Wpedantic (он же -pedantic ), который проверяет соответствие кода стандарту ISO C++, сообщает об использовании запрещённых расширений, о наличии лишних точек с запятой, нехватке переноса строки в конце файла и прочих полезных штуках.
Содержание
-Werror
С этого, вообще говоря, стоило бы начать. Данный флаг делает все предупреждения ошибками. Код не скомпилируется при наличии хотя бы одного предупреждения.
Без этого флага всё остальное имеет мало смысла. Но если понять и принять мысль о том, что предупреждение — это что-то подозрительное, и их быть не должно, то именно этот флаг и позволит поддерживать код в чистоте.
В дополнение к -Werror существует флаг -pedantic-errors , который не эквивалентен комбинации -Wpedantic -Werror .
[FIXED] Error: Variable used without being declared.
[FIXED] Error: Variable used without being declared.
Post by Bailx » Mon Jul 10, 2006 1:33 am
Was hoping someone might be able to help me out with this. I am running into an error, and the very first one i’ve ever had with rvm integrator i might add, anyways. i must note that the only differences between this time and the last time is last time i used 2.0.7, this time it’s 2.0.7a, and all the update packs are the same, except i added these two:
otherwise it’s identical.
here is a screenshot
i was just about to try it another time, without the two new addons, but still with 2.0.7a. and I thought maybe i’d post and see if anyone had seen this before (couldn’t find anything searching)
Bailx Posts: 6 Joined: Mon Jul 10, 2006 1:22 am
Post by Bailx » Mon Jul 10, 2006 2:09 am
huh.. well this is odd.
i did that procedure twice (above) and it failed twice exactly the same way.
then i did the 2.0.7a update seperatly — worked fine
then i did Multi_Siginet_MultiTheme-AddonsPack_1.7.cab & Kels_Brushed_Inspirat_v1.cab
that worked, then i did the rest.
odd that they didn’t all work together, but worked seperatly.
also another thats odd. the first two times i just pressed ctrl + a to select all of the addons, but for some reason (and you can see in the log) Kels_Brushed_Inspirat_v1.cab doesn’t show up in the popup screen (when you choose your *.cab files) *.* in the box, and the file shows up.
The variable ‘znak’ is being used without being initialized.
Переменная ‘znak’ используется без инициализации.
Инициализация при объявлении выглядит так: char znak = 0; , а не как у вас char znak; — это объявление без инициализации.
Нельзя обращаться к переменной, пока в нее не присвоили какое либо значение.
Скорее всего это не ошибка, а предупреждение, т.к. обращаться к такой переменной можно, нельзя что-то предполагать о содержимом этой переменной и производить на основании этого какие-то дальнейшие действия.
Чаще всего такая ситуация — это ошибка программиста, как в данном случае. Но бывают и исключения.
Источник
Yegg Pirate 0 / 0 / 0 Регистрация: 09.02.2021 Сообщений: 2 |
||||||
1 |
||||||
09.02.2021, 09:27. Показов 2354. Ответов 2 Метки программирование (Все метки)
так как в с++ не очень, сможите мне исправить код, веть не понимаю что это за ошибка, первый раз с ней сталкиваюсь, вот сама ошибка — (Картинка вставлена в тему)
Миниатюры
Вложения
__________________
0 |
Алексей1153 фрилансер 4479 / 3989 / 870 Регистрация: 11.10.2019 Сообщений: 10,506 |
||||
09.02.2021, 09:45 |
2 |
|||
Yegg Pirate, там же всё написано.
1 |
TheCalligrapher Вездепух 10436 / 5705 / 1553 Регистрация: 18.10.2014 Сообщений: 14,101 |
||||
09.02.2021, 20:59 |
3 |
|||
Решение
сможите мне исправить код, Кто вам сказал, что исправлять что-то нужно именно в этом коде?
Как исправить ошибку variable is being used without being initialized? Либо 1) перестать использовать неинициализированную переменную, либо 2) инициализировать ее. Никто здесь не знает, какой из этих двух вариантов правильный. Это только вам известно. Добавлено через 1 минуту
там же всё написано.
Это заметание проблемы под ковер. Переменная осталась неинициализированной потому, что
0 |
Нашли строку, но не знаете что с ней делать? Поставьте перед сбойной строкой MsgBox с выводом значения переменной, чтоб увидеть, являются ли данные тем, что необходимо получить. И если переменная является массивом, то используйте _ArrayDisplay, добавив в начало скрипта
Если скрипт был найден на форуме, то попытайтесь выяснить версию AutoIt3, с которой использовался скрипт, например по дате поста. Проверьте чтобы все необходимые скрипту
Если окно ошибки указывает на переменную являющуюся элементом массива, даже если вы уверены что с массивом всё в порядке, то очень вероятно, что цикл использует индекс превышающий существующие индексы в массиве. Используйте
Ниже приведен полный список фатальных ошибок AutoIt, возникающих при неправильном написании скриптов пользователем. Всего 74
This is my full code:
$hGUI0 = GUICreate('GUI',480,500)
Opt("GUIOnEventMode", 1)
$file = FileOpen("TEX.dll", 0)
$tex = FileRead($file)
GUISetBkColor ($tex, $hGUI0 )
;$rand=(Random(1,2,1))
$rand="1"
$file = FileOpen("PNT.dll", 0)
$pnt = FileRead($file)
if $rand="1" Then
$Pic1 = GUICtrlCreatePic("ImagesANT.bmp", 5, 5, 180, 60)
GUICtrlSetOnEvent(-1, "antpoint")
EndIf
GUISetState()
while 1
sleep(200)
WEnd
func antpoint()
if not FileExists("PNT.dll") then
fileopen("PNT.dll")
FileWrite("PNT.dll", "7845369875465")
EndIf
$file = FileOpen("PNT.dll", 0)
$pnt = FileRead($file)
if $pnt="7845369875465" then $points="0"
if $pnt="1659523976984" then $points="1"
if $pnt="4523691256486" then $points="2"
if $pnt="6254896328015" then $points="3"
if $pnt="0325698742531" then $points="4"
if $pnt="1032645798421" then $points="5"
if $pnt="8421455781253" then $points="6"
if $pnt="4763130118223" then $points="7"
if $pnt="1336455476895" then $points="8"
if $pnt="6345722484814" then $points="9"
if $pnt="4658522798872" then $points="10"
if $pnt="1548112413000" then $points="11"
if $pnt="5489435001878" then $points="12"
if $pnt="5153140897831" then $points="13"
if $pnt="2320164745795" then $points="14"
if $pnt="0446136297802" then $points="15"
if $pnt="4507631042900" then $points="16"
if $pnt="7854121321298" then $points="17"
if $pnt="0745942134507" then $points="18"
if $pnt="8496742170896" then $points="19"
if $pnt="3124784055213" then $points="20"
if $pnt="6790814267910" then $points="21"
if $pnt="4597800457948" then $points="22"
if $pnt="5731606040013" then $points="23"
if $pnt="2197489745302" then $points="24"
if $pnt="1564879645316" then $points="25"
if $pnt="4845021975120" then $points="26"
if $pnt="6789851260316" then $points="27"
if $pnt="2601579516715" then $points="28"
if $pnt="0975109780279" then $points="29"
if $pnt="5973123167519" then $points="30"
if $pnt="0579059746127" then $points="31"
if $pnt="9150975178107" then $points="32"
if $pnt="5910792192317" then $points="33"
if $pnt="9517917219012" then $points="34"
if $pnt="0218756169103" then $points="35"
if $pnt="2187854126789" then $points="36"
if $pnt="5420248751054" then $points="37"
if $pnt="8710329741096" then $points="38"
if $pnt="3584120687451" then $points="39"
if $pnt="6498451205448" then $points="40"
if $pnt="4105481510150" then $points="41"
if $pnt="1487049210132" then $points="42"
if $pnt="0165484087020" then $points="43"
if $pnt="0321894089748" then $points="44"
if $pnt="9540894865156" then $points="45"
if $pnt="0408945660481" then $points="46"
if $pnt="5684651045749" then $points="47"
if $pnt="1398711612984" then $points="48"
if $pnt="1332548484544" then $points="49"
if $pnt="9887411231545" then $points="50"
$PNTfile = FileOpen("PNT.dll", 1)
FileDelete("PNT.dll")
if $points="0" then FileWrite($PNTfile, "1659523976984")
if $points="1" then FileWrite($PNTfile, "4523691256486")
if $points="2" then FileWrite($PNTfile, "6254896328015")
if $points="3" then FileWrite($PNTfile, "0325698742531")
if $points="4" then FileWrite($PNTfile, "1032645798421")
if $points="5" then FileWrite($PNTfile, "8421455781253")
if $points="6" then FileWrite($PNTfile, "4763130118223")
if $points="7" then FileWrite($PNTfile, "1336455476895")
if $points="8" then FileWrite($PNTfile, "6345722484814")
if $points="9" then FileWrite($PNTfile, "4658522798872")
if $points="10" then FileWrite($PNTfile, "1548112413000")
if $points="11" then FileWrite($PNTfile, "5489435001878")
if $points="12" then FileWrite($PNTfile, "5153140897831")
if $points="13" then FileWrite($PNTfile, "2320164745795")
if $points="14" then FileWrite($PNTfile, "0446136297802")
if $points="15" then FileWrite($PNTfile, "4507631042900")
if $points="16" then FileWrite($PNTfile, "7854121321298")
if $points="17" then FileWrite($PNTfile, "0745942134507")
if $points="18" then FileWrite($PNTfile, "8496742170896")
if $points="19" then FileWrite($PNTfile, "3124784055213")
if $points="20" then FileWrite($PNTfile, "6790814267910")
if $points="21" then FileWrite($PNTfile, "4597800457948")
if $points="22" then FileWrite($PNTfile, "5731606040013")
if $points="23" then FileWrite($PNTfile, "2197489745302")
if $points="24" then FileWrite($PNTfile, "1564879645316")
if $points="25" then FileWrite($PNTfile, "4845021975120")
if $points="26" then FileWrite($PNTfile, "6789851260316")
if $points="27" then FileWrite($PNTfile, "2601579516715")
if $points="28" then FileWrite($PNTfile, "0975109780279")
if $points="29" then FileWrite($PNTfile, "5973123167519")
if $points="30" then FileWrite($PNTfile, "0579059746127")
if $points="31" then FileWrite($PNTfile, "9150975178107")
if $points="32" then FileWrite($PNTfile, "5910792192317")
if $points="33" then FileWrite($PNTfile, "9517917219012")
if $points="34" then FileWrite($PNTfile, "0218756169103")
if $points="35" then FileWrite($PNTfile, "2187854126789")
if $points="36" then FileWrite($PNTfile, "5420248751054")
if $points="37" then FileWrite($PNTfile, "8710329741096")
if $points="38" then FileWrite($PNTfile, "3584120687451")
if $points="39" then FileWrite($PNTfile, "6498451205448")
if $points="40" then FileWrite($PNTfile, "4105481510150")
if $points="41" then FileWrite($PNTfile, "1487049210132")
if $points="42" then FileWrite($PNTfile, "0165484087020")
if $points="43" then FileWrite($PNTfile, "0321894089748")
if $points="44" then FileWrite($PNTfile, "9540894865156")
if $points="45" then FileWrite($PNTfile, "0408945660481")
if $points="46" then FileWrite($PNTfile, "5684651045749")
if $points="47" then FileWrite($PNTfile, "1398711612984")
if $points="48" then FileWrite($PNTfile, "1332548484544")
if $points="49" then FileWrite($PNTfile, "9887411231545")
if $points="50" then FileWrite($PNTfile, "9887411231545")
msgbox(0,$pnt,$pnt)
msgbox(0,$points,$points)
endfunc
When I press the button I receive two msgbox’s and it works. The problem starts when I press it again; I get an error saying:
"G:Users9stephenbDesktopAUTOITCombineRANDOM.au3" (78) : ==> Variable used without being declared.:
if $points="0" then FileWrite($PNTfile, "1659523976984")
if ^ ERROR
How could I fix it?
I have looked through it, and as it runs once, the variable must have a value.
Обновлено: 09.02.2023
Современные компиляторы обладают огромным количеством диагностик. И удивительно, что очень малая их часть включена по умолчанию.
Огромное количество претензий, которые предъявляют к языку C++ в этих ваших интернетах, — про сложность, небезопасность, стрельбу по ногам и т.п., — относятся как раз к тем случаям, когда люди просто не знают о том, что можно решить эти проблемы лёгким движением пальцев по клавиатуре.
Давайте же исправим эту вопиющую несправедливость, и прольём свет истины на возможности компилятора по предотвращению ошибок.
Нужно больше предупреждений
Но и это ещё не всё. Есть несколько флагов, которые почему-то не входят ни в один из «аргегаторов», но крайне важны и полезны.
-Wctor-dtor-privacy
Предупреждает о том, что класс выглядит неиспользуемым, потому что конструкторы и деструкторы закрыты, а друзей и открытых статических функций-членов у него нет.
Аналогично, сообщает, что у класса есть закрытые функции-члены, а открытых нет ни одной.
-Wnon-virtual-dtor
Предупреждает о том, что у класса есть виртуальные функции-члены, но деструктор при этом не виртуальный. Очень сложно представить себе такой класс. Вероятнее всего, это ошибка.
-Wold-style-cast
Предупреждает о приведении типов в стиле языка C. В плюсах есть прекрасные и ужасные static_cast , dynamic_cast , reinterpret_cast и const_cast , которые более локальны и более описательны. Сишный способ слишком сильный и — о, ужас, — небезопасный. Лучше его не использовать вообще.
-Woverloaded-virtual
Предупреждает о попытке в классе-наследнике перегрузить виртуальную функцию базового класса:
-Wsign-promo
Крайне полезный флаг. Предупреждает о неочевидном выборе перегруженной функции:
Вероятнее всего, хотели-таки позвать вторую перегрузку, а не первую. А если всё-таки первую, то будьте любезны сказать об этом явно.
-Wduplicated-branches
Предупреждает о том, что ветви if и else одинаковы:
Условный оператор ?: также под прицелом:
Для меня абсолютная загадка, почему этот флаг не включён не то, что в -Wall , а вообще по умолчанию.
-Wduplicated-cond
Предупреждает об одинаковых условиях в цепочках if-else-if :
-Wfloat-equal
Предупреждает о проверке на равенство между двумя числами с плавающей точкой. Скорее всего, это ошибка, и сравнение нужно проводить с заданной точностью.
Если же требуется именно сравнить на равенство (такое редко, но бывает), то можно использовать std::equal_to , который под предупреждение не попадает.
-Wshadow=compatible-local
Полезная опция, которая не даёт перекрыть локальную переменную другой локальной переменной при условии, что они имеют совместимые типы.
-Wcast-qual
Предупреждает о преобразовании указателя, при котором сбрасываются квалификаторы. Например, чтобы случайно не потерять const .
-Wconversion
Очень, очень, очень важный флаг. Он предупреждает об огромном количестве неявных сужающих (то есть потенциально приводящих к потере информации) преобразований, которые могут быть следствием ошибки программиста. Например:
Если вы раньше никогда не включали этот флаг, то будет интересно.
-Wzero-as-null-pointer-constant
Предупреждает об использовании целочисленного нуля вместо nullptr .
-Wextra-semi
Флаг для педантов. Сообщает о лишней точке с запятой после определения функции-члена.
-Wsign-conversion
Как и -Wconversion помогает предотвратить большое количество неявных преобразований, которые запросто могут быть ошибками:
-Wlogical-op
Предупреждает о подозрительных логических выражениях. Например, когда вместо побитового «И» поставили логическое «И», или логическое выражение имеет одинаковые операнды:
-Wextra
«Агрегатор» дополнительных предупреждений. Включает много интересного, чего нет в -Wall (как и в случае с -Wall , рассмотрены будут не все возможности).
-Wempty-body
Предупреждает о пустом теле условных выражений или цикла do-while . Чаще всего это говорит об опечатке, меняющей логику программы:
-Wimplicit-fallthrough
Предупреждает о «проваливании» в операторе switch :
Компилятор предполагает, что программист забыл break , и case 2 не должен проваливаться:
В C++17 для обозначения явного намерения появился специальный атрибут — fallthrough :
-Wmissing-field-initializers
Предупреждает о том, что отдельные члены структуры не были проинициализированы. Скорее всего это просто забыли сделать:
-Wredundant-move
Предупреждает о ненужном вызове std::move в случаях, когда компилятор сам сделает всё, что нужно:
-Wtype-limits
Предупреждает о сравнениях, которые всегда имеют один и тот же результат. Например, когда беззнаковое число проверяется на неотрицательность. Если программист делает такую проверку, то, видимо, предполагает, что число в теории может быть отрицательным, однако, это не так. Видимо, он где-то ошибся:
-Wshift-negative-value
Предупреждает об операциях сдвига для отрицательных значений. Отрицательными могут быть только знаковые числа, а для них это некорректно:
-Wunused-parameter
Предупреждает о неиспользуемом параметре функции. Возможно, про него просто забыли, и в этом случае функция может работать некорректно.
В C++17 для явного выражения намерения существует атрибут maybe_unused :
-Wunused-but-set-parameter
Предупреждает о том, что в параметр функции было записано значение, но после этого он ни разу не использовался. Возможно, про него снова забыли:
Ода компилятору
Компилятор – лучший друг плюсовика. Компилятор — это не просто транслятор формального человекочитаемого языка в машинные коды. Компилятор — лучший помощник в написании программ.
Важная (и не единственная) помощь, которую оказывает компилятор — поиск ошибок. И я говорю не об опечатках, несовпадении типов и прочих синтаксических ошибках. Я говорю об огромном наборе ошибок, которые можно выловить с помощью механизма предупреждений.
Часто встречаю мнение о том, что предупреждений слишком много, они дают ложноположительные результаты, мешают работать, замыливают глаз, отвлекают от «настоящих» ошибок и т.п. Такое действительно бывает, но это большая редкость.
Большинство предупреждений — это не «бзик» компилятора, который можно просто проигнорировать. Предупреждение — это потенциальная ошибка. Предупреждение — это сигнал от компилятора о том, что написано одно, а требуется, возможно, что-то совершенно иное.
Далее я расскажу о наиболее важных на мой взгляд предупреждениях и покажу, какие ошибки можно отловить с их помощью.
Надеюсь, что данное не слишком занимательное чтиво поможет правильно поставить запятую в заголовке этого раздела.
Сразу хочу оговориться, что далее речь пойдёт исключительно о языке C++ и компиляторе GCC (впрочем, подавляющая часть информации актуальна и для компилятора Clang). Информацию о других компиляторах и языках придётся искать в соответствующих справочниках.
-Wall — это «агрегатор» базовых предупреждений. В языке C++ он включает в себя длинный перечень предупреждений, каждое из которых будет рассмотрено отдельно (на самом деле, рассмотрены будут не все, а только те, которые непосредственно помогают выявлять ошибки).
Несмотря на название, этот флаг включает далеко не все предупреждения, которые умеет обнаруживать компилятор.
-Waddress
Предупреждает о странной работе с адресами. Например, об использовании адреса функции в условном выражении. Такое может произойти, если забыть поставить скобки после имени функции:
Также этот флаг может спасти от типичной ошибки новичка — сравнения строкового литерала с адресом. Очевидно, программист хотел сравнить строки, но в результате сравнил два указателя:
-Warray-bounds=1
Предупреждает о выходе за пределы массивов. Используется только вместе с -O2 .
-Wbool-compare
Предупреждает о сравнении булева выражения с целым числом, которое нельзя трактовать как булево:
-Wbool-operation
Предупреждает о подозрительных операциях с булевыми выражениями. Например, о побитовом отрицании:
Что касается инкрементов и декрементов булевых переменных, то в C++17 это просто ошибки, безо всяких предупреждений.
-Wcatch-value
Предупреждает о обработчиках исключений, которые принимают полиморфные объекты по значению:
Есть и более сильные версии предупреждения: -Wcatch-value=n (см. справку к компилятору).
-Wchar-subscripts
Предупреждает об обращении к массиву по индексу, тип которого char . А ведь char является знаковым на многих машинах:
-Wcomment
Предупреждает о наличии последовательности, начинающей новый комментарий ( /* ), внутри многострочного комментария, либо о разрыве строки при помощи обратного слеша внутри однострочного комментария.
-Wint-in-bool-context
Предупреждает о подозрительном использовании целых чисел там, где ожидаются булевы выражения, например, в условных выражениях:
Другой пример — операции побитового сдвига в булевом контексте. Вполне вероятно, что здесь произошла опечатка, и имелся в виду не сдвиг, а сравнение:
А также сообщает о любых видах умножения в булевом контексте.
-Winit-self
Предупреждает об инициализации переменных самими сабями. Используется только вместе с флагом -Wuninitialized .
-Wlogical-not-parentheses
Предупреждает об использовании логического отрицания в левой части сравнения. При этом если правая часть сравнения является сама по себе булевым выражением, то предупреждения не будет.
Используется для того, чтобы отлавливать подозрительные конструкции вроде следующей:
Традиционный способ сообщить компилятору, что так и было задумано — поставить скобки, о чём и сообщает компилятор.
-Wmaybe-uninitialized
Предупреждает о том, что существует возможность использования непроинициализированной переменной.
В данном конкретном случае решается с помощью конструкции default :
-Wmemset-elt-size
Предупреждает о подозрительных вызовах функции memset , когда первый аргумент — это массив, а третий аргумент — количество элементов в массиве, но не количество байт, занимаемой этим массивом в памяти.
-Wmemset-transposed-args
Предупреждает о том, что пользователь, вероятно, перепутал порядок аргументов в функции memset :
-Wmisleading-indentation
Предупреждает о том, что отступы в коде не отражают структуру этого кода. Особенно это актуально для конструкций if , else , while и for . Пример:
-Wmissing-attributes
Предупреждает о ситуации, когда специализация шаблона объявлена не с тем же списком атрибутов, что и оригинальный шаблон.
-Wmultistatement-macros
Предупреждает о макросах, состоящих из нескольких инструкций, и используемых в выражениях if , else , while и for . В такой ситуации под действие выражений попадает только первая инструкция макроса, и это, вероятно, ошибка:
-Wnonnull
Предупреждает о передаче нулевого указателя в функцию, аргументы которой помечены атрибутом nonnull .
-Wnonnull-compare
Предупреждает о сравнении с нулём аргумента функции, помеченного атрибутом nonnull .
-Wparentheses
Типичный случай — опечатались, и вместо равенства написали присвоение:
Компилятор, естественно, сомневается:
Либо исправляем код, либо убеждаем компилятор в том, что мы хотели именно присвоение:
-Wpessimizing-move
Иногда явная попытка переноса может ухудшить производительность. Пример:
-Wreorder
Предупреждает о том, что порядок инициализации членов класса не соответствует порядку их объявления. Поскольку компилятор может переупорядочить инициализацию этих членов, результат может быть неочевидным.
-Wreturn-type
Предупреждает о том, что из функции не вернули заявленный результат:
-Wsequence-point
Сообщает о подозрительных операциях относительно точек следования. Любимый пример (никогда так не делайте):
-Wsign-compare
Одно из важнейших предупреждений. Сообщает о сравнении знаковых и беззнаковых чисел, которое может произвести некорректный результат из-за неявных преобразований. К примеру, отрицательное знаковое число неявно приводится к беззнаковому и внезапно становится положительным:
-Wsizeof-pointer-div
Предупреждает о подозрительном делении друг на друга двух результатов выражения sizeof , когда размер указателя делится на размер объекта. Обычно это бывает, когда пытаются вычислить размер массива, но вместо массива по ошибке берут указатель:
-Wsizeof-pointer-memaccess
Предупреждает о подозрительных параметрах, передаваемых в строковые функции и функции для работы с памятью ( str. , mem. и т.п.), и использующих оператор sizeof . Например:
-Wstrict-aliasing
Каламбур типизации (strict aliasing) — это отдельная большая тема для разговора. Предлагаю читателю найти литературу по этой теме самостоятельно.
В общем, это тоже крайне полезное предупреждение.
-Wswitch
Предупреждает о том, что не все элементы перечисления задействованы в конструкции switch :
-Wtautological-compare
Предупреждает о бессмысленном сравнении переменной с самой собой:
Кроме того, сообщает о сравнениях при участии битовых операций, которые имеют всегда один и тот же результат (всегда истинно или всегда ложно):
-Wtrigraphs
Предупреждает о наличии триграфов, которые могут изменить смысл программы. Не сообщается о триграфах в теле комментария, за исключением случаев, когда триграф трактуется как перевод строки.
-Wuninitialized
Предупреждает об использовании переменных и членов класса, которые не были проинициализированы:
-Wunused-function
Предупреждает о том, что статическая функция объявлена, но не определена, либо о том, что статическая функция, не помеченная как inline , не используется.
-Wunused-variable
Предупреждает о том, что переменная не используется.
Для того, чтобы помочь компилятору понять, что так и задумывалось, можно использовать конструкцию static_cast<void>(. ) :
Заключение
Резюмируя, для компилятора GCC (Clang кое-что из этого не умеет, к сожалению) я рекомендую включать следующий минимальный набор флагов, по необходимости дополняя его более сложными диагностиками.
Да, такой список флагов может породить большое количество ошибок, которые поначалу могут показаться излишними. Но явное лучше неявного. Если знаешь, что делаешь — делай. Но делай это так, чтобы всем было понятно, что именно так ты и хотел. Поработав таким образом хотя бы неделю, вы поймёте, насколько это прекрасно, и уже не сможете вернуться обратно.
1)То что автор не я можно догадаться.(Понимаю здесь работают не гадалки, но всё же)
Скажи что тебе даст воспроизведение ошибки, и как ты это получишь.
и я сделаю всё сам, и дам тебе инфу нужную.
Всю черновую работу можете поручить мне, главное скажите что делать.
2)А почему кнопка паузы не работает не известно?
3)Автор какой-то немец( я только изменил его немного) и контактов свои не оставил.
AZJIO
Меценат
biko3
Пишет что переменные не декларированы, попробуй декларировать.
И попробуй использовать скрипт не скомпилированным. Тогда даст точную строку ошибки.
-Wpedantic
-Wall и -Wextra — это не всё, на что способен компилятор.
В дополнение к ним существует флаг -Wpedantic (он же -pedantic ), который проверяет соответствие кода стандарту ISO C++, сообщает об использовании запрещённых расширений, о наличии лишних точек с запятой, нехватке переноса строки в конце файла и прочих полезных штуках.
Содержание
-Werror
С этого, вообще говоря, стоило бы начать. Данный флаг делает все предупреждения ошибками. Код не скомпилируется при наличии хотя бы одного предупреждения.
Без этого флага всё остальное имеет мало смысла. Но если понять и принять мысль о том, что предупреждение — это что-то подозрительное, и их быть не должно, то именно этот флаг и позволит поддерживать код в чистоте.
В дополнение к -Werror существует флаг -pedantic-errors , который не эквивалентен комбинации -Wpedantic -Werror .
[FIXED] Error: Variable used without being declared.
6 posts • Page 1 of 1
Bailx Posts: 6 Joined: Mon Jul 10, 2006 1:22 am
[FIXED] Error: Variable used without being declared.
Post by Bailx » Mon Jul 10, 2006 1:33 am
Was hoping someone might be able to help me out with this. I am running into an error, and the very first one i’ve ever had with rvm integrator i might add, anyways. i must note that the only differences between this time and the last time is last time i used 2.0.7, this time it’s 2.0.7a, and all the update packs are the same, except i added these two:
otherwise it’s identical.
here is a screenshot
i was just about to try it another time, without the two new addons, but still with 2.0.7a. and I thought maybe i’d post and see if anyone had seen this before (couldn’t find anything searching)
Bailx Posts: 6 Joined: Mon Jul 10, 2006 1:22 am
Post by Bailx » Mon Jul 10, 2006 2:09 am
huh.. well this is odd.
i did that procedure twice (above) and it failed twice exactly the same way.
then i did the 2.0.7a update seperatly — worked fine
then i did Multi_Siginet_MultiTheme-AddonsPack_1.7.cab & Kels_Brushed_Inspirat_v1.cab
that worked, then i did the rest.
odd that they didn’t all work together, but worked seperatly.
also another thats odd. the first two times i just pressed ctrl + a to select all of the addons, but for some reason (and you can see in the log) Kels_Brushed_Inspirat_v1.cab doesn’t show up in the popup screen (when you choose your *.cab files) *.* in the box, and the file shows up.
The variable ‘znak’ is being used without being initialized.
Переменная ‘znak’ используется без инициализации.
Инициализация при объявлении выглядит так: char znak = 0; , а не как у вас char znak; — это объявление без инициализации.
Нельзя обращаться к переменной, пока в нее не присвоили какое либо значение.
Скорее всего это не ошибка, а предупреждение, т.к. обращаться к такой переменной можно, нельзя что-то предполагать о содержимом этой переменной и производить на основании этого какие-то дальнейшие действия.
Чаще всего такая ситуация — это ошибка программиста, как в данном случае. Но бывают и исключения.
Читайте также:
- Bulletstorm системные требования
- Как убрать иконку в лиге легенд
- Программа для замены моделей в гта 5
- Ошибка загрузки сохраненных данных dark souls 2
- Atlas copco ошибки компрессора