Sida 1 av 2

Variabelnamn i C

Postat: 22 jul 2010, 19:47
av Johnny Rosenberg
När det gäller variabelnamn i C så har jag sett att de flesta skriver med enbart gemener och ibland använder ett understreck, exempelvis:

Kod: Markera allt

int min_variabel;
Har också förstått att man inte använder versaler då dessa hellre används för konstanter, och då är det enbart versaler som avses.

Men personligen gillar jag inte understreck och jag hade hellre skrivit så här:

Kod: Markera allt

int MinVariabel;
Anses detta allmänt vara direkt felaktigt, så till den milda grad att man alltid bör undvika det? I C++ duger det ju tydligen…

Re: Variabelnamn i C

Postat: 22 jul 2010, 20:37
av Konservburk
Det beror på vem man frågar, men varken gnu- eller kernel-stilen gillar annat än små bokstäver och understreck. Det här är vad gnu säger om saken:
http://www.gnu.org/prep/standards/standards.html#Names skrev:Please use underscores to separate words in a name, so that the Emacs word commands can be useful within them. Stick to lower case; reserve upper case for macros and enum constants, and for name-prefixes that follow a uniform convention.

For example, you should use names like ignore_space_change_flag; don't use names like iCantReadThis.

Re: Variabelnamn i C

Postat: 22 jul 2010, 20:56
av m!rage
Programmerade Java en gång i tiden. Boken jag lärde mig från förespråkade variabelnamn i stil med "iCantReadThis", alltså liten bokstav i början och sedan börja varje nytt ord med stor bokstav.
Personligen tycker jag att detta går fortare att skriva då man bara behöver trycka ner skift (som man ändå ofta har lillfingret på) för att påbörja nytt ord istället för att både trycka ner skift och dessutom trycka på -

Re: Variabelnamn i C

Postat: 22 jul 2010, 21:08
av Konservburk
m!rage skrev:Personligen tycker jag att detta går fortare att skriva då man bara behöver trycka ner skift (som man ändå ofta har lillfingret på) för att påbörja nytt ord istället för att både trycka ner skift och dessutom trycka på -
Du förutsätter en tangentbordslayout där _ ligger på shift+- och att man dessutom faktiskt skriver ut variabelnamnet manuellt istället för att låta det autokompletteras på lämpligt sätt.

Re: Variabelnamn i C

Postat: 22 jul 2010, 21:31
av Johnny Rosenberg
Funderar bara på varför den ena metoden duger bra i C++ medan den förkastas i C.

Nåja, för att komma runt det hela (slippa använda det fula ”_”-tecknet) får jag väl börja använda kortare variabelnamn istället: a, b, x, y och så vidare. Det blir säkert populärt…

;D

Fast en metod är ju så klart att använda DennaMetod och sedan skriva ett makro som konverterar till denna_metod om man någon gång (mot alla tänkbara odds) skulle komma på den befängda idén att dela med sig av sitt skräp…

:o

Re: Variabelnamn i C

Postat: 22 jul 2010, 21:53
av Christian Johansson
På mitt jobb har man under många år haft namnkonventionen MyVariable för variabler i C ända fram till det nyaste projektet då man har gått över till myVariable. Vet inte riktigt varför.

Re: Variabelnamn i C

Postat: 22 jul 2010, 21:56
av Toledomahn
@Johnny:
Fast en metod är ju så klart att använda DennaMetod och sedan skriva ett makro som konverterar till denna_metod om man någon gång (mot alla tänkbara odds) skulle komma på den befängda idén att dela med sig av sitt skräp…
Om du söker lite på nätet så hittar du säkert ett macro som redan finns.

Re: Variabelnamn i C

Postat: 22 jul 2010, 22:41
av m!rage
@Johnny Rosenberg
Verkar väldigt dumt att ha flera namn på samma variabel - det borde bara skapa förvirring. Om du har gjort ett program from scratch och delat ut så är det du som satt programmeringsstilen som andra får rätta sig efter om de vill vara med och förbättra programmet. Förresten är det väl ingen som kommer döda dig för att du använder stora bokstäver istället för understreck för att påbörja nytt ord.
@Konservburk
Riktiga män programmerar i Notepad!! ;D Eller iaf i gedit... För mig som mest jobbar med små program till inbyggda system känns det lite overkill att skapa ett "projekt" i ett stort IDE

Re: Variabelnamn i C

Postat: 22 jul 2010, 22:46
av mcNisse
Utanför ämnet: Nu öppnar för det stora stora bråket! Alla vet att emacs är bäst... ;D

Re: Variabelnamn i C

Postat: 22 jul 2010, 23:33
av Toledomahn
Emacs har väl gått i stå vad jag vet?

Re: Variabelnamn i C

Postat: 22 jul 2010, 23:57
av mcNisse
Vad har du fått det ifrån?

Re: Variabelnamn i C

Postat: 23 jul 2010, 00:10
av Toledomahn
Det var vad jag läst på nätet men jag hade fel nu när jag kollade närmare: http://lists.gnu.org/archive/html/info- ... 00000.html Där ser man vad man missar när man inte håller sig ajour.

Re: Variabelnamn i C

Postat: 23 jul 2010, 01:48
av Substrata
Grundläggande är att C har ett platt namnrum för funktioner, så _ används vanligtvis för att undvika namnkrockar. C++ däremot kan dela upp namnrummet i mycket större grad. Specifika konventioner som camelCase eller separering med understreck är dock kulturella. Det står dig fritt att välja mellan UserAgentShutdown(...) eller user_agent_shutdown(...). Att ha olika konventioner i samma projekt luktar dock inte så bra, och du ska i det avseendet tänka på att du har beroenden som libc.

Re: Variabelnamn i C

Postat: 23 jul 2010, 02:45
av Toledomahn
@Johnny:

Gör ett macro om du vill, det är inte så svårt att ta en tangent som du inte använder så ofta, men ändå är lätttillgänglig med endast ett knapptryck och göra den till ett _

Re: Variabelnamn i C

Postat: 23 jul 2010, 09:34
av Lars
m!rage skrev:Verkar väldigt dumt att ha flera namn på samma variabel - det borde bara skapa förvirring.
Jag upptäckte nyligen att CAPL inte riktigt skiljer på versaler och gemener, det är riktigt läskigt! Så TestWaitForTimeout() är faktiskt samma sak som testwaitfortimeout(). Usch!

Apropå Emacs så används ofta bindestreck i elisp, som t.ex. funktionen save-buffer. Men det är väl bara i LISP-dialekter det ens är möjligt.

Re: Variabelnamn i C

Postat: 23 jul 2010, 10:21
av cthulhu
Emacs har väl gått i stå vad jag vet?
YOU LIE! :-X
Nej, seriost nu: faktum ar att utvecklingen av Emacs har snarare upplevt nagot av en tempo-okning de senaste aret efter att ledningen fatt en liten fornyelse. Nydligen slapptes v23.2.

EDIT: @Toledomahn, ah, ser din lank nu ang. 23.2. ;)

Re: Variabelnamn i C

Postat: 23 jul 2010, 16:27
av Johnny Rosenberg
m!rage skrev:@Johnny Rosenberg
Verkar väldigt dumt att ha flera namn på samma variabel - det borde bara skapa förvirring. Om du har gjort ett program from scratch och delat ut så är det du som satt programmeringsstilen som andra får rätta sig efter om de vill vara med och förbättra programmet. Förresten är det väl ingen som kommer döda dig för att du använder stora bokstäver istället för understreck för att påbörja nytt ord.
@Konservburk
Riktiga män programmerar i Notepad!! ;D Eller iaf i gedit... För mig som mest jobbar med små program till inbyggda system känns det lite overkill att skapa ett "projekt" i ett stort IDE
Nja, jag tänkte väl inte ha flera namn på samma variabel. Tänkte väl i så fall ha min egen version av programmet bara för mig, en version som ingen annan kommer att få se, medan versionen som skapas av det eventuella makrot får bli den officiella versionen.

Men visst kan det röra till sig om exempelvis någon skickar en patch och man kanske vill skriva om den och så vidare. Då får man ju även ha ett makro som gör om variablerna åt andra hållet…

Eller så skriver man ett som först analyserar vilken konversion man har och sedan konverterar till den andra…

Notepad är ju i mitt fall att gå över ån efter vatten. Då måste jag ju köra den via Wine i så fall. Verkar lite onödigt. För tillfället är det Gedit jag använder men tidigare har jag använt Emacs. Gav Gedit en ny chans när jag upptäckte att man lagt till lite tilläggsprogram sedan jag kollade senast, bland annat ”Textsnuttar” som jag fann användbart. Gjorde samma sak tidigare i Emacs, men det verkar vara enklare att skapa sådana i Gedit.

Dock saknar jag i Gedit att tabbstopp kommer automatiskt efter rader med nyckelord som ”for”, ”while” och så vidare, så att man i princip aldrig behöver tabba manuellt. Men om någon känner till ett tilläggsprogram för det så är det bara att hojta till.

Och autokomplettering av variabler och typer hade ju också underlättat lite.

Re: Variabelnamn i C

Postat: 23 jul 2010, 17:47
av m!rage
Notepad var ett skämt :) det är ett skitprogram som inte klarar någonting. Gedit funkar bra, det är dock inte en ren programmerings-editor, därför finns inte saker som autokomplettering. Men som du säger kanske det finns tillägg för det

Re: Variabelnamn i C

Postat: 24 jul 2010, 09:07
av Johnny Rosenberg
m!rage skrev:Notepad var ett skämt :) det är ett skitprogram som inte klarar någonting. Gedit funkar bra, det är dock inte en ren programmerings-editor, därför finns inte saker som autokomplettering. Men som du säger kanske det finns tillägg för det
Fast det finns säkert folk som tycker att Notepad är det bästa… Liksom det finns folk som föredrar Nano. Alla är vi olika.

Själv skulle jag nog helst jobba i Emacs, men för att kunna använda det riktigt optimalt lär jag nog lära mig Elisp ordentligt, men det tar emot. Lisp över huvud taget tar emot rejält för mig, jag orkar bara inte sätta mig in i det. Det var likadant när jag fick för mig att jag skulle skriva plugins till Audacity i Nykvist, som ju är någon form av lisp. Lyckades aldrig motivera mig mer än att lära mig grunderna.

Re: Variabelnamn i C

Postat: 24 jul 2010, 10:35
av dmz
Att konvertera all kod enligt vad du skrivit verkar... jättekonstigt.
Framförallt med just variabelnamn... var bara consistent genom all kod du
skriver. Om du skall skicka patchar så skall du dock anpassa dig efter rådande
stil, annars blir de garanterat inte accepterade.

FooBar är PascalCase och det är rätt ovanligt. Vanligare är camelCase (fooBar),
vilket jag stött på mest i Java, javascript och dylika skrämmande ting.

Mina högst perlsonliga åsikter är foo_bar över fooBar / FooBar (eller andra
idiotiska ting så som FOOBAR / FoObAr (ja... det finns folk som gör så. Jag
skriver om ett annars väl fungerande program från scratch där upphovsmakaren har
noll consistency rakt igenom, just på grund av att det är helt omöjligt att
maintaina)), trots att det kan anses vara osexigt.

Jag föredrar också foo(bar()) över foo bar (sistnämnda ej legal i C dock) och
jag brukar generellt parantesera ordentligt då jag anser att det ger en bättre
överblick (jag är dock ingen lispare).

Det är en annan sak vad gäller indentering (K&R vs GNU vs Linux vs Allman etc).
Jag vet inte hur det förehåller sig med C eller andra språk, men som alla känner
till så är Perl magiskt, se på detta:

Kod: Markera allt

%z=(f=>[106,97]);
%f=(f=>sub{return
    sprintf"%sa%s%s%sp%.dh,
    ",chr@{$z{f}}[0]},);
printf("%s","@{[$f{f}->()]}");
Och så lite applicerar vi lite magi:

Kod: Markera allt

> perltidy japh5.pl

%z = ( f => [ 106, 97 ] );
%f = (
    f => sub {
        return sprintf "%sa%s%s%sp%.dh,
", chr @{ $z{f} }[0];
    },
);
printf( "%s", "@{[$f{f}->()]}" );
Eller:

Kod: Markera allt

$c='python';$_=`printf hack`;$_=~s;ck;;;;$c=~s%^(?!\x68)(.)(?2)(?1)(.)(?1)(?2)(?<!.{4}h)$%$2%;print j.substr($_,1),p,$c.",\n"
Och:

Kod: Markera allt

$c = 'python';
$_ = `printf hack`;
$_ =~ s;ck;;;
$c =~ s%^(?!\x68)(.)(?2)(?1)(.)(?1)(?2)(?<!.{4}h)$%$2%;
print j. substr( $_, 1 ), p, $c . ",\n"
Med perltidy så kan du skapa profiler enligt exakt din egen, personliga stil.
Detta gör alltså att när du skall patcha någon annans kod, kan du köra den
genom detta magiska filter först, editera outputten, som ser ut precis som om
du själv skulle skrivit det, och, när du är klar, återställa enligt den stil
skaparen använder sig av.

Mycket smidigt då det, förutom den vanliga irritationen över att folk inte kodar
som folk, även kan bli praktiska problem (tabs vs spaces t.ex).

Angående 'autocompletion', vim har en strålande sådan som inte bara sträcker sig
över aktuell fil, se:
Bild

Men nu kanske jag gled iväg lite...