Forum » Programiranje » [c++] MVS koda __asm v makroju ne deluje
[c++] MVS koda __asm v makroju ne deluje
goranv ::
Zakaj mi v spodnji kodi v funkciji dva macro ARG_NEXT javi napako ce pa gre za isto asm kodo kot v funkciji ena.
Compiler vrne:
warning C4405: 'mov': identifier is reserved word
error C2400: inline assembler syntax error in 'second operand'; found 'register'
Compiler vrne:
warning C4405: 'mov': identifier is reserved word
error C2400: inline assembler syntax error in 'second operand'; found 'register'
#define ARG_START\ int arg_count = 0,\ arg_data = 0; #define ARG_NEXT\ __asm\ {\ mov ecx, [i]\ mov eax, [ebp+8+ecx*4]\ mov [arg_data], eax\ } void ena( int a, ... ) { int arg_data; for( int i = 0; i < a; i++ ) { __asm { mov ecx, [i] mov eax, [ebp+8+ecx*4] mov [arg_data], eax } printf( "[%d] = %d\n", i, arg_data ); } } void dva( int a, ... ) { ARG_START for( int i = 0; i < a; i++ ) { ARG_NEXT printf( "[%d] = %d\n", i, arg_data ); } } int main() { ena( 4, 5, 6, 7 ); dva( 4, 8, 9, 10 ); return 0; }
Ahim ::
Kaj se zgodi, ce makru ARG_NEXT dodas parameter i, in ta makro klices kot ARG_NEXT(i) z lokalno variablo i v funkciji dva() ?
Randomness ::
ARG_NEXT makro spremeni tako:
#define ARG_NEXT __asm \ { \ __asm mov ecx, [i] \ __asm mov eax, [ebp+8+ecx*4] \ __asm mov [arg_data], eax \ }
Zgodovina sprememb…
- spremenilo: Randomness ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Delo za datotekami in zbirkami v zbirniku...Oddelek: Programiranje | 851 (719) | Brane2 |
» | [ASM] Pomoč, ne najdem napakeOddelek: Programiranje | 1105 (981) | c0dehunter |
» | asm - vnos stevilk s tipkovniceOddelek: Programiranje | 1289 (1145) | scarymovie |
» | [C++ & asm] najhitrejša inicializacija 2D matrikeOddelek: Programiranje | 1802 (1442) | Fury |
» | [C/C++] Variadic MacrosOddelek: Programiranje | 2115 (1940) | OwcA |