Spray
Новичок
- Сообщения
- 17
- Репутация
- 2
Безуспешно пытаюсь прикрутить препроцессор Си (mcpp) к компилятору AutoIt (AutoIt3Wrapper).
По отдельности препроцессор худо-бедно работает. Например, такой код
превращается в такой
Директиву #include mcpp тоже понимает, однако он игнорирует директиву #include-once, воспринимая её как ошибочную. Таким образом использовать препроцессор перед Au3Stripper проблематично.
Попробовал вызвать mcpp после стриппера, чтобы все #include, включая #include-once, были уже обработаны, но тут возникает новая беда: Au3Stripper удаляет все директивы, предназначенные для препроцессора. Можно, конечно, обрамить их #Au3Stripper_Off и #Au3Stripper_On, но получается очень громоздко:
Можно ли как-то решить эту проблему? Например, сделать так, чтобы mcpp воспринимал все #include-once как «сишные» #pragma once, или чтобы стриппер не удалял незнакомые ему директивы.
P. S. jEdit4AutoIt — крутой препроцессор для AutoIt, но он, как я понял, может работать только в составе jEdit.
По отдельности препроцессор худо-бедно работает. Например, такой код
Код:
#define ASDF "asdf"
#define ZXCV "zxcv"
#ifdef QWER
ConsoleWrite (ASDF)
#endif
#define QWER
#ifdef QWER
ConsoleWrite (ZXCV)
#endif
превращается в такой
Код:
ConsoleWrite ("zxcv")
Директиву #include mcpp тоже понимает, однако он игнорирует директиву #include-once, воспринимая её как ошибочную. Таким образом использовать препроцессор перед Au3Stripper проблематично.
Попробовал вызвать mcpp после стриппера, чтобы все #include, включая #include-once, были уже обработаны, но тут возникает новая беда: Au3Stripper удаляет все директивы, предназначенные для препроцессора. Можно, конечно, обрамить их #Au3Stripper_Off и #Au3Stripper_On, но получается очень громоздко:
Код:
#include <Array.au3>
#Au3Stripper_Off
#define ASDF "asdf"
#Au3Stripper_On
$myVariable = ASDF
#Au3Stripper_Off
#ifdef ASDF
#Au3Stripper_On
$myVariable &= "qwer"
#Au3Stripper_Off
#endif
#Au3Stripper_On
Можно ли как-то решить эту проблему? Например, сделать так, чтобы mcpp воспринимал все #include-once как «сишные» #pragma once, или чтобы стриппер не удалял незнакомые ему директивы.
P. S. jEdit4AutoIt — крутой препроцессор для AutoIt, но он, как я понял, может работать только в составе jEdit.
Код:
; File ............: __NAME__
; AutoItVersion ...: __AUTOIT_VERSION__
; Time ............: __TIME__
; Date ............: __DATE__
#define Text "foo bar"
#define Var1 $ok[$i]
#define Var2 $test
#define Beta
~$b[$i]
$a %= $b
$a <<= $v[$i]
$a >>= $v
#ifdef Beta
#include <test_beta.au3>
#else
#include <test.au3>
#endif
Var1 = ( 1 > $a ? "ok" : Text )
For $i : $aArray
MsgBox(64,"",$aArray[$i])
Next
#undef Var2
#ifdef Var2
MsgBox(64,"","1")
#elif Test
MsgBox(64,"",Var2)
#elif Var1
MsgBox(64,"",Text)
#else
MsgBox(64,"","3")
#endif
Код:
; File ............: pp_test.au3
; AutoItVersion ...: v3.3.0.0
; Time ............: 20:20:35
; Date ............: Mi Mai 2009
BitNOT($b[$i])
$a = Mod($a, $b)
$a = BitShift($a, $v[$i])
$a = BitShift($a, -($v))
#include <test_beta.au3>
If 1 > $a Then
$ok[$i] = "ok"
Else
$ok[$i] = "foo bar"
EndIf
For $i = 0 To UBound($aArray) -1
MsgBox(64, "", $aArray[$i])
Next
MsgBox(64, "", "foo bar")