Kde je chyba - program v C

Jan Waclawek konfera na efton.sk
Středa Říjen 2 13:30:20 CEST 2013


>Kde je chyba v nasledujicim radku?
>
>if (EE_Cti(K_EE_SPOJENI == 1)) {
>
>    Spust_neco()
>}


To su 4 riadky... ;-)

A nie je tam ziadna syntakticka chyba - EE_Cti sa zavola s parametrom 1, ak
K_EE_SPOJENI ma hodnotu 1; inak s parametrom 0.



>Zajimalo by mne jak se tato chyba projevi v jinych jazycich treba C#, Java, 
>Paskal. Bude kompilator hlasit chybu?

Pascal je prisne typovany jazyk a nedaju sa len tak mirnix-dirnix zamienat
celociselne a booleanovske typy, takze by musela byt funkcia EE_Cti
deklarovana s parametrom typu boolean; rovnako funkcia EE_Cti by musela
mat navratovu hodnotu typu boolean; inak je to syntakticka chyba.

Napriklad:

var
  K_EE_SPOJENI: byte;

procedure Spust_neco;
begin
end;

function EE_Cti(i: byte) : byte;
begin
  EE_Cti := i;
end;


begin
  K_EE_SPOJENI := 123;
  if (EE_Cti(K_EE_SPOJENI = 1)) then begin
    Spust_neco;
  end;
end.


> "c:\lazarus\fpc\2.2.4\bin\i386-win32\fpc.exe" "C:\tmp\a.pas"
Free Pascal Compiler version 2.2.4 [2009/10/25] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Win32 for i386
Compiling C:\tmp\a.pas
a.pas(16,30) Error: Incompatible type for arg no. 1: Got "Boolean",
expected "Byte"
a.pas(20) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: c:\lazarus\fpc\2.2.4\bin\i386-win32\ppc386.exe returned an error
exitcode (normal if you did not specify a source file to be compiled)

wek



Další informace o konferenci Hw-list