2012-06-15 92 views
2

純粹來自好奇 - 爲什麼不可能將變量命名爲「c」?例如...字母「c」作爲變量名稱

.386 
.model flat, stdcall 
option casemap:none 

include windows.inc 
include kernel32.inc 
include user32.inc 

includelib user32.lib 
includelib kernel32.lib 

Main  proto 

.data 

hOutput dd 0 
hInput dd 0 

bReadWritten dd 0 
szText db "Program calculates the roots of the quadratic expression ax^2+bx+c",10,"Enter a",0 

a dd 0 
b dd 0 
c dd 0 

delta dd 0 

szInput db 128 dup(0) 



.data? 

.code 
start: 

Invoke Main 
Invoke ExitProcess,0 

Main proc 
    invoke GetStdHandle, STD_OUTPUT_HANDLE 
    mov hOutput, eax 

    invoke GetStdHandle,STD_INPUT_HANDLE 
    mov hInput, eax 

    invoke lstrlen, addr szText 
    invoke WriteFile, hOutput, addr szText, eax, ADDR bReadWritten, NULL 

    invoke ReadFile, hInput, a, eax,addr bReadWritten, NULL 
    invoke ReadFile, hInput, b, eax,addr bReadWritten, NULL 
    invoke ReadFile, hInput, c, eax,addr bReadWritten, NULL 

    invoke Sleep,10000 

    ret 
Main endp 


end start 

...這會導致裝配時錯誤

C:\ 3,第三方程序\ winASM \ WinAsm \項目\二次方程\ EXE.asm( 24):錯誤A2008:語法錯誤:C
C:\ 3-第三方程序\ winASM \ WinAsm \項目\二次方程\ EXE.asm(52):錯誤A2008:語法錯誤:C

當我重命名它時,所有組件都運行良好。

+0

很有可能'c'是winasm的保留字。我從來沒有使用它,但我不知道。如果是,應該在手冊中記錄。 – twalberg

回答

2

嘗試命名您的變量PASCALFORTRANBASICSYSCALLSTDCALL。我相信,你會得到同樣的錯誤。 它們都是關鍵字,用於指定在使用上述語言編寫的程序時調用約定的過程。 C關鍵字的有效用法與funcname PROTO C arguments...

+0

好吧,現在我知道變量不能與一些現有的編程語言命名相同。如果你已經解釋了它,我會很高興和滿意:) – 0x6B6F77616C74

+0

@kowalt我做了,有點 –

+1

kowalt,不是編程語言;調用約定。其中一些起源於某些語言,但其他一些語言則不具有語言名稱。 – Joey