Что нового

ошибка при "глубоком" #include функций

Статус
Закрыто для дальнейших ответов.

running-frag

why me?
Сообщения
441
Репутация
60
вопрос такого характера

у меня есть скрипт, который грузит GUI, оттуда подгружает ещё одно и там ещё один :smile:

в общем говоря в третьем вложенном файле автоит на фукнции орёт странными словами
Код:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\_autoit\XXX\script.au3"    
D:\_autoit\XXX\window.gui\gui.YYY.edit.au3 (80) : ==> "Func" statement has no matching "EndFunc".:
Func some3()

я пробивал уже по отдельности эти скрипты - ошибок нет (т.е. запускал не как цельное а каждый скрипт отдельно), если не писать там функции - всё работает исправно

PS: это не банальный пропуск кавычки, запяток, скобки и т.д. версия автоита 3.3.6.1
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
В файле gui.YYY.edit.au3 в функции some3() отсутствует "EndFunc".
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Значит нет. Выкладывай этот файл.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Код:
Func _GUI_childWindowCreate ($_winName)
	Local $_coord = _GUI_getChildWindowSize ($_winName)
	
	
	$hGUI_child =  	GUICreate ($_winName, $_coord[3], $_coord[4], $_coord[1], $_coord[2], -1, $WS_EX_TOOLWINDOW, $hGUI)
	
	Select
		Case $_winName == "XXX"
			;#include "window.gui/gui.XXX.au3"
		
		Case $_winName == "YYY"
			#include "window.gui/gui.YYY.au3"
		
		EndSelect
		
					GUISetState (@SW_SHOW, $hGUI_child)
EndFunc


И и вот внутри этих инклудов (а именно в XXX) бьёт ошибку, если его закоментить - проблем нет, т.е. проблема именно в том файле.

И вот она функций которая бьёт ошибку.
Код:
Func some45 ()
	ConsoleWrite ("some45 done"&@CR)
EndFunc

$hCharTab[0]		= GUICtrlCreateTab	(5, 5, 490, 440)


$hCharTab[1]		= GUICtrlCreateTabItem	("List")
;#include <gui.XXX.list.au3>
						
$hCharTab[2]		= GUICtrlCreateTabItem	("Edit")
;#include <gui.XXX.edit.au3>

$hCharTab[3]		= GUICtrlCreateTabItem	("Type")
						;#include <script>


Так из всех последующих .au3 тоже идут ошибки. И там тоже "простейшие одностночные функции-проверки".



PS: весь код не могу выложить
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
По тому, что ты тут показал, сказать ничего нельзя, кроме того, что это идиотский стиль написания скриптов - "#Include" размещены внутри кода.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Yashied [?]
идиотский стиль написания скриптов - "#Include"
Т.е. то что там в этих табах должно быть по 200 строк это "всё красиво"... А разбить логически на нужные части в инклуды это по идитотски. Ну да, самое собой... 8) Не суть.

Ну я с самого начала говорил что "фигня какая то". Потому что всё что "ДО" имеенно XXX инклуда работает на ура (и после тоже если его закомментить).
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
running-frag сказал(а):
Т.е. то что там в этих табах должно быть по 200 строк это "всё красиво"... А разбить логически на нужные части в инклуды это по идитотски.

Да по-идиотски. "#Include" предназначены совсем для другого. Для оптимизации и разбивки кода нужно использовать функции.

running-frag сказал(а):
Потому что всё что "ДО" имеенно XXX инклуда работает на ура (и после тоже если его закомментить).

Ну так значит проблема в самом XXX.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Re: ошибка при \"глубоком\" #include функций

Yashied [?]
Да по-идиотски. "#Include" предназначены совсем для другого. Для оптимизации и разбивки кода нужно использовать функции.
Какой IDE такой и код. Был бы под Eclipse\Netbeans плагин, я бы делал "по человечески". :-X


Yashied [?]
Ну так значит проблема в самом XXX.
running-frag
И тут натыкаемся на то с чего начинали. Тот код где функция "some45()" он "полный". Т.е. я просто сменил имена файлов и всё. Там больше ничего нет.




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

Я тут "уписиваюсь" :rofl: :rofl: Если поставить косяк перед EndFunc (ну типо любой симвом что б получить ошибку) оно закричит на то что ошибка по этому символу.

Но если поставить символ в одну строчку с EndFunc - "s EndFunc" то получим старую ошибку "Func" statement has no matching "EndFunc"....
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Вот твоя ошибка.

Код:
Func _GUI_childWindowCreate($_winName)
;	Local $_coord = _GUI_getChildWindowSize($_winName)

;	$hGUI_child = GUICreate($_winName, $_coord[3], $_coord[4], $_coord[1], $_coord[2], -1, $WS_EX_TOOLWINDOW, $hGUI)

	Select
		Case $_winName == "XXX"
			;#include "window.gui/gui.XXX.au3"

		Case $_winName == "YYY"
;			#include "window.gui/gui.YYY.au3"

			Func some3()

			EndFunc

	EndSelect

	GUISetState(@SW_SHOW, $hGUI_child)
EndFunc


Нельзя размещать функции внутри "For", "Select" и т.д. Это еще раз подтверждает, что "#Include" нужно использовать по назначению.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Re: ошибка при \\\"глубоком\\\" #include функций

Так же если не обьявлять (касается только функций, всё остальное обьявляется и работает) функции то скрипт исправно пашет. Т.е. косяк касается только функций, как то такое вообще возможно то ... :stars:


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

Yashied [?]
Нельзя размещать функции внутри "For", "Select" и т.д. Это еще раз подтверждает, что "#Include" нужно использовать по назначению.

Бинго! Огромное спс.

По поводу "по назначение" ну предложи схему кода где файлы не будут по 10 тыс. строк и логически резделены, с учётом того что в коде ещё впаян GUI...

Меня большое кол. кода на автоит глаз режет, сильно (он сам по себе слабочитабельный + сфетофор). Так я просто разбиваю логически "какой файлик за что отвечает". И в случае чего его правлю. А так получится один ***уясебе файл, с набором такого же кол. фукнций. Там надо человека нанимать что б он "перематывал" на нужную часть кода. :smile: Опять же я давно и сильно плююсь в сторону IDE автоита. Но другово нет, поэтому такой "изврат" (не поспоришь, но альтернатив то нету).


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

И ещё это только в автоите данный "тип" написания можно считать "идиотским" :blum:.

Ещё раз спс. :D
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Здест ты не прав. Синтаксис вполне себе ничего. Раскраска, это прирогатива редактора (можешь поменять) и к ЯП не имеет никакого отношения. Если ты используешь SciTE, то там есть сворачивание частей кода, контрольные точки и многое-многое другое, что сильно облегчает навигацию по коду. Если у тебя получается файл более 10000 строк, то скорее всего ты выбрал неправильный стиль написания кода.

Все большие куски можно оформить в виде функций. Несколько логически связанных функций, например функции диалоговых окон, можно разместить в отдельном .au3 файле, и т.д. Так что все вполне решается и получается красивый код.

Вообще, любой ЯП имеет свои особенности и предпочтения, и их нужно придерживаться.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Yashied [?]
Здест ты не прав.
Серьёзно? Функция по длинне не смущает? Меня немного смущает для "родных функций". И я думаю всех кто знают языки и начинают "изучать" автоит.
Код:
GUICtrlCreateMenuItem ()

Другой конечно вопрос "она чётко определяет" свои действия, как говорится и ежу понятно. Легко запомнить. Что делает код легкозапоминаемым. Но на счёт красоты кода это уже личное наверное.

Подсветка иногда сбивает с толку. К примеру используешь сначало UDF, ну этот берюзовый код (типо встроенный UDF или расширенные функции, не знаю как они правильно называются) а после идёт обычные функции (синим). Сразу складывается впечатление что функции работают с "разными" вещами. Но это не так. И тут уже начинаешь вчитываться...

SciTE. Я не ставил себе задачу изучить что может данные IDE. Мне достаточно что я могу ковыряться в других. SciTE мало где используется. Большая часть программистов использует именно Eclipse\Netbeans (за исключением узких спецификаций к примеру VStudio и т.д.).

Ну на счёт 10 тыс. строк то я загнул, у меня в сумме под 5 тыс. где то будет, может ;D. Но это не меняет "гибскости" в данной сфере. Код надо писать так что б его самому (минимум) понимать. Налепить всё в одну строку можно (имеется ввиду что не использывать пробелы для читабельности) но будет ли данный код понятен. В автоит - мне нет.

По поводу "все большие куски можно оформить". Ну если по хорошему то тут просто (как и везде) пишем для себя "свой" UDF под различные задачи. Но тут есть большие трудности когда в игру вступает GUI. Потому что сразу выложить всё в отдельный файл не всегда получается. У меня вечно как начинаю "рисовать" GUI так из раздела новичков не вылажу, почему? Пытаюсь по красивому сделать (ну и с долей корректности).

Всё выше личное конечно же имхо. :whistle:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Так же если не обьявлять (касается только функций, всё остальное обьявляется и работает) функции то скрипт исправно пашет. Т.е. косяк касается только функций, как то такое вообще возможно то ...

http://autoit-script.ru/autoit3_docs/keywords/Func.htm
[box]Обратите внимание, что внутри функции нельзя объявить другую функцию.[/box]

Код:
Func _GUI_childWindowCreate($_winName)
;  ...
            Func some3()

            EndFunc
;  ...
EndFunc

Это запрещенная конструкция.
AutoIt после
Код:
Func _GUI_childWindowCreate($_winName)

натыкается на
Код:
Func some3()

а ожидает что найдет
Код:
EndFunc


Об этом тебе и говорит твоё сообщение об ошибке.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
running-frag сказал(а):
Функция по длинне не смущает? Меня немного смущает для "родных функций". И я думаю всех кто знают языки и начинают "изучать" автоит.

Нет, не смущает. В API можно встретить и такие:

GetCurrentProcessExplicitAppUserModelID
GetPhysicallyInstalledSystemMemory
IsThemeBackgroundPartiallyTransparent

и т.д.

И это нормально.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
Раз уж тема решена пофлудим немного. :-[

Yashied [?]
Если ты используешь SciTE, то там есть сворачивание частей кода, контрольные точки и многое-многое другое
Подробней если можно.

По поводу сворачивания - мусор недоделанный. Потому что оно не сохраняется. И при след. открывании IDE приходится заново сворачивать всё... Что занимает достаточное кол. времени.

А вот контрольные точки интересный момент не знал, расскрой эту тему если можешь.
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
В SciTE нажимаешь alt v a - эта последовательность сворачивает/разворачивает все функции,while и всё такое прочее. Сворачивает всё что можно свернуть.
 
Автор
R

running-frag

why me?
Сообщения
441
Репутация
60
running-frag [?]
По поводу сворачивания - мусор недоделанный. Потому что оно не сохраняется. И при след. открывании IDE приходится заново сворачивать всё... Что занимает достаточное кол. времени.
sngr [?]
В SciTE нажимаешь alt v a
Опаньки, каюсь.
Есть ещё "хинты"?
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Это не хинт. Нажми и отпусти alt. У тебя будут в меню(скажем view) подчёркнута буква, нажав коию ты откроешь это меню. В подменю всё тоже самое. Нажав alt v a ты открыл меню view и тыкнул в toggle all folds. alt v c сворачивает/разворачивает текущюю функцию.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
running-frag [?]
По поводу сворачивания - мусор недоделанный. Потому что оно не сохраняется.
Ну да, ну да, всё о чём не ведаю это мусор ;D
[box title=SciTEUser.properties]fold.on.open=1[/box]
 
Статус
Закрыто для дальнейших ответов.
Верх