ncurses, változó

 ( Uhum2004 | 2011. szeptember 1., csütörtök - 15:14 )

Nem tudom, van-e jelentősége, de inkább megírom, hogy Ubuntu alatt ismerkedek az ncurses-szal. Két memóriaterület egyezése vagy eltérése esetén más-más színnel íratnél ki egy byte-ot, de megdöbbenésemre három byte-os random értékeket kapok, mint pl. CCBE80
Addig butítottam a dolgot, míg már csak azt gyanítom, hogy nem használhatok lokális változókat?
Ez az első ujjgyakorlatom, úgyhogy ne nagyon csesszetek le, de a Google nem segített megmagyarázni, mi van itt. Segítség...

update_regs(ramdump, ramtmp)
{
char c, lpos;

lpos=1;
c=1;
mvprintw(lpos,4,"%02X "),c;

// innentől minden kigyilkolva
/*
for (lpos=1;lpos<=32;lpos++)
{
c=(char *) ramdump;
if ((char *) ramtmp == c)
{ COL } // macro to set default color
else
{ COL_R } // macro to set red color
mvprintw(lpos,4,"%02X "),c;
}
*/
}

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

mvprintw(lpos,4,"%02X ",c);

igy elsore.

ez mindenfele sikitas nelkul lefordul?

2011-ben azert igy illik tipusokat megadni. (fuggveny visszatero ertek, argumentumok..)

---------------------------------------------------------------------------------------
Unix is simple. It just takes a genius to understand its simplicity. — Dennis Ritchie

, operátor miatt elvben simán fordul. mvprintw int-et ad vissza, az egész sor egy kifejezés, amelynek visszatérési értéke c.

Szép nyelv a C!

"...az egész sor egy kifejezés, amelynek visszatérési értéke c."
Amit utana eldob.. es a fordito nem warningol meg ninozik orrba-szajba, hogy biztos ezt akartad? Kotve hiszem..
Neha a GCC-nek kulon kervenyt kell benyujtani, hogy a ciklus feltetelnel az a konkret = az valoban az akart lenni, es nem ==, szoval hagyja a warningot (bar egy plusz zarojel segit).

--
Always remember you’re unique, just like everyone else.

Attól még hiba nélkül lefordul. A warningokat sajna rossz szokás skippelni.

Szokás szerint az iránt érdeklődnék, hogy mostanában a hírekben itt-ott előforduló alternatívákkal mit kapsz? Azaz szeretnék látni egy GCC, egy CLang/LLVM és egy PCC kimenetet az ominózus pár sorról. Ebből a PCC-től nem sokat várok, mert tudtommal mesze nem a használható hibaüzenetek a célja a fejlesztésének, de a CLang/LLVM-ről azt tartják, hogy sokkal fejlesztőbarátabb a dolog.
Más kérdés, hogy valóban rossz szokás a warningokra nem figyelni. Hej, mikor még a múlt évezredben a főnököm azt mondta, hoy addig nincs átvéve a szoftverem, míg a lint (*) bármit is kiköp magából. Ezt csak addig tartotta, míg egy kb helloworld.c -re megmutattam, hogy mit mond a lint.

(*) Aki nem ismerné, a lint egy C-programkód ellenőrző volt

a következő program -Wall -pedantic kapcsolókkal gcc-vel bármiféle figyelmeztetés nélkül lefordul:

#include <stdio.h>

int main (argc, argv)
{
	int a[5], i;
	i = 3;
	a[i] = 42, 99;
	printf("a[i] == i[a] == %d" "\n", i[a]);
	return 0;
}

amire vártam, hogy sír, az az, hogy:
-argc-nek, argv-nek nincs megadva tipus
-azt a 99-et a semminek adja vissza
-a tömbnél megcseréltem az offsettet a névvel.

még egy érdekes anomália a stringek fűzése. ezek ilyen kevésbé ismert marhaságai a c-nek.
obfuscated c contestben mindegyiket sokat látni.

gcc (GCC) 4.6.1 20110819 (prerelease)

---------------------------------------------------------------------------------------
Unix is simple. It just takes a genius to understand its simplicity. — Dennis Ritchie

clang/llvm:

main.c:3:5: error: clang: exit 1
second parameter of 'main' (argument array) must be of type 'char **'
int main (argc, argv)
    ^
main.c:7:13: warning: expression result unused [-Wunused-value]
        a[i] = 42, 99;
                   ^~
1 warning and 1 error generated.

clang version 2.9 (tags/RELEASE_29/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix

---------------------------------------------------------------------------------------
Unix is simple. It just takes a genius to understand its simplicity. — Dennis Ritchie

Hát az i[a] tipusú viccek se újak (és szintén szabványos C-s agymenés), ellenben itt az eredmény:

$ gcc --version
gcc (GCC) 4.2.1 20070719  [FreeBSD]
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ pcc --version
pcc 0.9.9 20110216 for i386-portbld-freebsd8.2, 
$ clang --version
clang version 2.8 (branches/release_28)
Target: i386-portbld-freebsd8.2
Thread model: posix
$ gcc -Wall -pedantic lo.c -o lo.gcc
$ pcc -Wall -pedantic lo.c -o lo.pcc
$ clang -Wall -pedantic lo.c -o lo.clang
lo.c:3:17: warning: parameter 'argv' was not declared, defaulting to type 'int'
      [-pedantic]
int main (argc, argv)
                ^
lo.c:3:11: warning: parameter 'argc' was not declared, defaulting to type 'int'
      [-pedantic]
int main (argc, argv)
          ^
lo.c:3:5: error: second parameter of 'main' (argument array) must be of type
      'char **'
int main (argc, argv)
    ^
lo.c:7:13: warning: expression result unused [-Wunused-value]
        a[i] = 42, 99;
                   ^~
3 warnings and 1 error generated.
$ 

Az azért rendes, hogy a clang legalább valamit nyafog :-)

Hát, meg kéne nézni, nálam sajna csak gcc van. Amúgy elvben elhasalnia egyiknek sem szabad rajta, lévén teljesen korrekt C kód volt. Warning - na ott tényleg lehetnek bajok.

De remélem ebből nem lesz újabb malloc téma... :-)

Hát igen... most mit mondjak,,, ez nagyon kezdő baki volt. Köszönöm szépen mindkettőtöknek !

Nekem ne köszönd, nem én vettem észre :-).
Csak elmondtam, miért fordul le. Ami meg csak ínyencségként jó.

nincs mit. c-vel nagyon gyorsan labon tudja magat loni az ember es sokszor eszrevetlenul. egy jo debugger ismerete es hasznalata latvanyosan meg tudja konnyiteni az eletet. meg raszokni minden ellenorzesere, meg debug forditasban a stderr-re kiiratasara. pl:

#if DEBUG
fprintf(2, "val erteke: %d\n", val);
#endif

es -DDEBUG kapcsoloval forditani teszteleskor

---------------------------------------------------------------------------------------
Unix is simple. It just takes a genius to understand its simplicity. — Dennis Ritchie

Köszi a tippet. Én is találtam valamit, ami érdekes lehet:
http://dirac.org/linux/gdb/07-Debugging_Ncurses_Programs.php

Ez hasznosnak tunik.

---------------------------------------------------------------------------------------
Unix is simple. It just takes a genius to understand its simplicity. — Dennis Ritchie