Line 19381 error variable used without being declared

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 err...

Recommended Posts

booz

    • 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

Community On Patrol

    • Share

Hi booz,

1st Welcome to the AutoIt Forums! :idiot:

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.
    • 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 >_< .

  • 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.
  • 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).

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

dbzfanatic

    • 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

booz

  • 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

AdmiralAlkex

    • 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

booz

  • 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

SmOke_N

  • 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

booz

  • 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

dbzfanatic

    • 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

booz

  • 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

dbzfanatic

    • 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

booz

  • 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

SmOke_N

  • 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

booz

  • 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

booz

  • 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


Guest

This topic is now closed to further replies.

  • #1

понятно что это переменная вызывается но не обьявленна.
так вот как узнать какая именно?
ну окошко выскакивает а какую искать?
хорошо если код не большой то можно искать, а если пару тыс строк то уже и затруднительно.
я то чисто случайно нашел но это чисто случайно.
а осмысленно можно узнать какая именно?

подскажите пожалуйста.

Garrett


  • #2

D:Projectvalue.au3 (1) : ==> Variable used without being declared.:
ConsoleWrite($Value)
ConsoleWrite(^ ERROR

И, что тут непонятного? :blink:

Добавлено:

Сообщение автоматически объединено: 7 Дек 2011


agikon [?]

Когда программист пишет пару тысяч строк, такая ошибка как объявление переменной у него не должна вызывать затруднения. ;)

  • #3

Garrett
хоть убей не понял куда это писать и куда потом смотреть в случае ошибки?
$Value это уже известная переменная.
а если переменных много, то тогда каждую переменную писать в ConsoleWrite ?

а я ж говорю окошко выскакивает и там ничего конкретно не написано.
кстати ошибка может появлятся не при запуске скрипта, а во время работы когда идёт считывание ошибочной переменной.

Garrett


  • #4

agikon
В примере выше, красным помечено:

D:Projectvalue.au3 (1) : ==> Variable used without being declared.:

номер строки, где обнаружена ошибка

имя переменной

указатель на позицию в строке
Смотреть всё это в консоли SciTE.

agikon [?]

а если переменных много, то тогда каждую переменную писать в ConsoleWrite ?

Нет, это только пример.

Скриншот, пожалуйста, в студию.

Medic84


  • #5

Garrett [?]

Скриншот, пожалуйста, в студию.

ТС говорит наверное про уже скомпилированный скрипт.

  • #6

ТС говорит наверное про уже скомпилированный скрипт.

Даже там пишут номер строки, где обнаружена ошибка.

  • #7

единственно что понял. что эт онадо нажать F5 и смотреть в консоли скайти, это я понял.
но что всё остальное непонятно.

Garrett
если в скрипте например 20 переменных то что тогда?
каждую писать

ConsoleWrite($1)
ConsoleWrite($2)
ConsoleWrite($3)


и что такое value.au3 ? это инклуд который ошибки показывает? у меня в папке инклудов такого нет. где его скачать можно подскажите пожалуйста.

Zaramot:Даже там пишут номер строки, где обнаружена ошибка.
да пишет только такой строки нет вообще в скрипте.

kaster

kaster

Мой Аватар, он лучший самый


  • #8

Zaramot [?]

Даже там пишут номер строки, где обнаружена ошибка.

только там нумерация друга, если подключены библиотеки.

  • #9

по пунктам пожалуйста можете написать что куда вписывать чтобы показывало какая переменная ошибку выдаёт?

Garrett


  • #10

agikon [?]

по пунктам пожалуйста можете написать что куда вписывать чтобы показывало какая переменная ошибку выдаёт?

Загрузите свой скрипт в SciTE и нажмите Ctrl+F5
В консоли всё увидите.

  • #11

а как загрузить в SciTE?
у меня при компиляции компилирует скайти, это не одно и то же?
под «загрузить в скайти» что имеете в виду? как загрузить в скайти?

а вообще нажимаю Ctrl+F5 и в консоли несколько строк появляется и всё. сам скрипт не запускается.

Garrett


  • #12

agikon [?]

под «загрузить в скайти» что имеете в виду?

Открыть документ, с расширением AU3 (скрипт) в SciTE

  • #13

ну у меня все скрипты открываются в скайти, нажимаю Ctrl+F5 и в консоли несколько строк появляется и всё. сам скрипт не запускается.

вы же поймите скрипт запускается с некими параметрами которые считываются с ини-файла, а если я запускаю через скайти то наверно файл инициализации не обрабатывается.

Garrett


  • #14

agikon [?]

ну у меня все скрипты открываются в скайти, нажимаю Ctrl+F5 и в консоли несколько строк появляется и всё. сам скрипт не запускается.

Он и не должен запускаться. Запускается проверка синтаксиса, где вы и можете посмотреть, какие ошибки допущены в написание кода.

  • #15

так при компиляции варнингов то и нет.
ошибка появляется когда скрипт работает и когда код с ошибочной переменной обрататывается, только тогда скрипт ошибку выдаёт.

вот я ж и говорю как в окне с ошибкой «Variable used without being declared» понять какая переменная вызвала эту ошибку?
если код то указывается, но например в скрипте 1000 строк, то код например 1624.
вот в чём вся суть вопроса.

Garrett


  • #16

agikon [?]

так при компиляции варнингов то и нет.

А кто говорит, что они есть? :blink:

  • #17

agikon [?]

вы же поймите скрипт запускается с некими параметрами которые считываются с ини-файла

скрипт не скомпилированный тоже читает из ini-файла. Ищи ошибку тестируя нескомпилированный скрипт.

  • #18

ошибку я не могу найти потому что не указывает на строку ошибки.
оно то пишет что проблема в переменной но какой хз.

Garrett


  • #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

Метки программирование (Все метки)


так как в с++ не очень, сможите мне исправить код, веть не понимаю что это за ошибка, первый раз с ней сталкиваюсь, вот сама ошибка — (Картинка вставлена в тему)
вот код — (11к.txd)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
WORD LocalPlayer::getClosestTarget(float fov)
{
    D3DXVECTOR3 viewAngles = LocalPlayer::getLocalViewAngles();
    D3DXVECTOR3 localEyePos = LocalPlayer::getLocalEyePos();
 
    DWORD bestEntity;
 
    for (int i = 0; i < 64; i++)
    {
        if (Entity::isValid(Entity::getEntBase(i)) && Entity::getEntTeam(Entity::getEntBase(i)) != LocalPlayer::getLocalTeam())
        {
            D3DXVECTOR3 angle = CalcAngle(localEyePos, Entity::getEntBonePos(Entity::getEntBase(i), Hacks::AimBone));
            D3DXVECTOR3 cAngles = ClampAngles(angle - viewAngles);
            float delta = sqrt(cAngles.x * cAngles.x + cAngles.y * cAngles.y);
 
            if (delta < fov)
            {
                fov = delta;
                bestEntity = Entity::getEntBase(i);
            }
        } 
    }
    return bestEntity;
}

Миниатюры

Как исправить ошибку variable is being used without being initialized?
 

Вложения

Тип файла: txt 11к.txt (727 байт, 2 просмотров)

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Алексей1153

фрилансер

4479 / 3989 / 870

Регистрация: 11.10.2019

Сообщений: 10,506

09.02.2021, 09:45

2

Yegg Pirate, там же всё написано.

C++
1
DWORD bestEntity{};



1



TheCalligrapher

Вездепух

Эксперт CЭксперт С++

10436 / 5705 / 1553

Регистрация: 18.10.2014

Сообщений: 14,101

09.02.2021, 20:59

3

Лучший ответ Сообщение было отмечено zss как решение

Решение

Цитата
Сообщение от Yegg Pirate
Посмотреть сообщение

сможите мне исправить код,

Кто вам сказал, что исправлять что-то нужно именно в этом коде?

Цитата
Сообщение от Yegg Pirate
Посмотреть сообщение

Как исправить ошибку variable is being used without being initialized?

Либо 1) перестать использовать неинициализированную переменную, либо 2) инициализировать ее. Никто здесь не знает, какой из этих двух вариантов правильный. Это только вам известно.

Добавлено через 1 минуту

Цитата
Сообщение от Алексей1153
Посмотреть сообщение

там же всё написано.

C++
1
DWORD bestEntity{};

Это заметание проблемы под ковер. Переменная осталась неинициализированной потому, что if ни разу не выполнился. Вполне возможно (и скорее всего) основная проблема именно в этом, то есть в неправильном значении аргумента функции, а не в том, что переменная просто неинициализирована.



0



Нашли строку, но не знаете что с ней делать? Поставьте перед сбойной строкой MsgBox с выводом значения переменной, чтоб увидеть, являются ли данные тем, что необходимо получить. И если переменная является массивом, то используйте _ArrayDisplay, добавив в начало скрипта

Если скрипт был найден на форуме, то попытайтесь выяснить версию AutoIt3, с которой использовался скрипт, например по дате поста. Проверьте чтобы все необходимые скрипту

Если окно ошибки указывает на переменную являющуюся элементом массива, даже если вы уверены что с массивом всё в порядке, то очень вероятно, что цикл использует индекс превышающий существующие индексы в массиве. Используйте

Ниже приведен полный список фатальных ошибок AutoIt, возникающих при неправильном написании скриптов пользователем. Всего 74

Текст ошибки Перевод текста Unable to open the script file. Не удается открыть файл сценария. Badly formatted «Func» statement. Неправильный формат оператора «Func» Unable to parse line. Не удалось разобрать строку. Missing right bracket ‘)’ in expression. Отсутствует правая скобка ‘)’ в выражении. Missing operator in expression. Отсутствует оператор в выражении. Unbalanced brackets in expression. Незакрытые скобки в выражении. Error in expression. Ошибка в выражении Error parsing function call. Ошибка разбора (парсинга, синтаксиса) вызываемой функции Incorrect number of parameters in function call. Неверное количество параметров при вызове функции «ReDim» used without an array variable. «ReDim» используется с переменной не являющейся массивом Illegal text at the end of statement (one statement per line). Недопустимый текст в конце оператора (один оператор в строке) «If» statement has no matching «EndIf» statement. Оператор «If» не имеет сопровождающий его оператор «EndIf» «Else» statement with no matching «If» statement. Оператор «Else» не имеет сопровождающий его оператор «If» «EndIf» statement with no matching «If» statement. Оператор «EndIf» не имеет сопровождающий его оператор «If» Too many «Else» statements for matching «If» statement. Слишком много операторов «Else» для одного оператора «If» «While» statement has no matching «Wend» statement. Оператор «While» не имеет сопровождающий его оператор «Wend» «Wend» statement with no matching «While» statement. Оператор «Wend» не имеет сопровождающий его оператор «While» Variable used without being declared. Переменная используется без первоначального объявления Array variable has incorrect number of subscripts or subscript dimension range exceeded. Переменная массива имеет неверное количество индексов или индекс превышает размер массива. Array variable subscript badly formatted. Неправильный формат индекса в переменной массива. Subscript used with non-Array variable. Индекс используется с переменной не являющейся массивом Too many subscripts used for an array. Слишком много индексов для массива. Пример Dim $a[1] = [[1]] Missing subscript dimensions in «Dim» statement. Отсутствуют индексы измерений в операторе «Dim». Пример Dim $a[1] = 1 No variable given for «Dim», «Local», «Global» or «Const» statement. Отсутствует объявление переменной в операторах «Dim», «Local», «Global» или «Const» Expected a «=» operator in assignment statement. Ожидается оператор «=» в конструкции присваивания. Invalid keyword at the start of this line. Недопустимое ключевое слово в начале этой линии Array maximum size exceeded. Превышен максимальный размер массива «Func» statement has no matching «EndFunc». Оператор «Func» не имеет сопровождающий его оператор «EndFunc» Duplicate function name. Дубликат имени функции (Одна и та же функция встречается в скрипте дважды) Unknown function name. Неизвестное имя функции (Вызов отсутствующей функции) Unknown macro. Неизвестное имя макроса (опечатка или устаревший макро) Unable to execute the external program. Не удается выполнить внешнюю программу. Unknown option or bad parameter specified. (?) Неизвестный параметр или плохо указанного параметра. Unable to load the internet libraries. (?) Не удается загрузить библиотеки Интернет Unable to open file, the maximum number of open files has been exceeded. Не удается открыть файл, превышено максимальное количество открытых файлов. Invalid file handle used. Используется неверный дескриптор файла Invalid file filter given. (?) Неверно задан файловый фильтр Expected a variable in user function call. Ожидается переменная при вызове пользовательской функции. Пример Func _FuncName(ByRef) «Do» statement has no matching «Until» statement. Оператор «Do» не имеет сопровождающий его оператор «Until» «Until» statement with no matching «Do» statement. Оператор «Until» не имеет сопровождающий его оператор «Do» «For» statement is badly formatted. Оператор «For» имеет неправильный формат «Next» statement with no matching «For» statement. Оператор «Next» не имеет сопровождающий его оператор «For» «ExitLoop/ContinueLoop» statements only valid from inside a For/Do/While loop. Операторы «ExitLoop/ContinueLoop» допускаются только внутри циклов For/Do/While. «For» statement has no matching «Next» statement. Оператор «For» не имеет сопровождающий его оператор «Next» «Case» statement with no matching «Select»or «Switch» statement. Оператор «Case» не имеет сопровождающий его оператор «Select» или «Switch» «EndSelect» statement with no matching «Select» statement. Оператор «EndSelect» не имеет сопровождающий его оператор «Select» Recursion level has been exceeded — AutoIt will quit to prevent stack overflow. Уровень рекурсии был превышен, AutoIt завершает работу, чтобы предотвратить переполнение стека Unable to access RunAs API. Не удается получить доступ RunAs API String missing closing quote. Строка не содержит закрывающую кавычку Unterminated string. Незавершенная строка Badly formated variable or macro. Неправильный формат переменной или макро This keyword cannot be used after a «Then» keyword. Это ключевое слово не может быть использована после ключевого слова «Then» «Select» statement is missing «EndSelect» or «Case» statement. Оператор «Select» не имеет сопровождающий его оператор «EndSelect» или «Case» «If» statements must have a «Then» keyword. Оператор «If» должен иметь ключевое слово «Then» Cannot assign values to constants. Невозможно присвоить значения константе. Cannot make existing variables into constants. Невозможно сделать существующие переменные в константы Object referenced outside a «With» statement. Объект ссылается за пределами оператора «With». Nested «With» statements are not allowed. Вложенные операторы «With» не допускается Variable must be of type «Object». Переменная должна быть типом «Object» The requested action with this object has failed. Запрашиваемое действие с этим объектом не удалось Variable appears more than once in function declaration. (?) Переменная появляется более одного раза в объявлении функции ReDim array can not be initialized in this manner. ReDim массива не может быть выполнен таким способом. Пример ReDim $arr1[1] = [1] An array variable can not be used in this manner. Переменная массива не может быть использована таким образом. Can not redeclare a constant. Невозможно декларировать константу повторно Can not redeclare a parameter inside a user function. Невозможно объявить переменную, переданную как параметр внутри пользовательской функции. Can pass constants by reference only to parameters with «Const» keyword. Можно передавать константы как ссылки только на параметры с ключевым словом «Const». Например _FuncName(ByRef $w) Can not initialize a variable with itself. текст Incorrect way to use this parameter. Неправильный способ использования этого параметра «EndSwitch» statement with no matching «Switch» statement. Оператор «EndSwitch» не имеет сопровождающий его оператор «Switch» «Switch» statement is missing «EndSwitch» or «Case» statement. Оператор «Switch» не имеет сопровождающий его оператор «EndSwitch» или «Case» «ContinueCase» statement with no matching «Select»or «Switch» statement. Оператор «ContinueCase» не имеет сопровождающий его оператор «Select» или «Switch» Assert Failed! Утверждение неудачно! AutoIt has encountered a fatal crash as a result of:r Unable to execute DLLCall. AutoIt столкнулся с фатальным крахом в результате осуществления: не удается выполнить DLLCall Obsolete function/parameter. Устаревшая функция / параметр Invalid Exitcode (reserved for AutoIt internal use). Недопустимый Exitcode (зарезервировано для внутреннего использования AutoIt). Cannot parse #include Не удается выполнить разбор #include Error opening the file Ошибка при открытии файла (при несуществующем #include-файле)

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 кое-что из этого не умеет, к сожалению) я рекомендую включать следующий минимальный набор флагов, по необходимости дополняя его более сложными диагностиками.

Да, такой список флагов может породить большое количество ошибок, которые поначалу могут показаться излишними. Но явное лучше неявного. Если знаешь, что делаешь — делай. Но делай это так, чтобы всем было понятно, что именно так ты и хотел. Поработав таким образом хотя бы неделю, вы поймёте, насколько это прекрасно, и уже не сможете вернуться обратно.

6f28bade671cc3c971d5eec1878e8c41.jpg

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.

NeiroNx

The variable ‘znak’ is being used without being initialized.

Переменная ‘znak’ используется без инициализации.

Инициализация при объявлении выглядит так: char znak = 0; , а не как у вас char znak; — это объявление без инициализации.

Нельзя обращаться к переменной, пока в нее не присвоили какое либо значение.

Скорее всего это не ошибка, а предупреждение, т.к. обращаться к такой переменной можно, нельзя что-то предполагать о содержимом этой переменной и производить на основании этого какие-то дальнейшие действия.
Чаще всего такая ситуация — это ошибка программиста, как в данном случае. Но бывают и исключения.

Читайте также:

      

  • Bulletstorm системные требования
  •   

  • Как убрать иконку в лиге легенд
  •   

  • Программа для замены моделей в гта 5
  •   

  • Ошибка загрузки сохраненных данных dark souls 2
  •   

  • Atlas copco ошибки компрессора

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Line 1 syntax error unexpected word expecting
  • Line 1 syntax error near unexpected token newline
  • Line 1 syntax error expecting the following tokens library package program unit
  • Line 1 column 1 syntax error value object or array expected
  • Line 0 parsing error cannot read properties of undefined reading map

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии