mboost-dp1
Dårlig kode
- Forside
- ⟨
- Forum
- ⟨
- Tagwall
Man skulle tro, at det var muligt at skrive hello world program korrekt.
Men se:
https://towardsdatascience.com/how-to-print-hello-...
Hvem kan finde flest tilfælde af dårlig stil i de eksempler?
Men se:
https://towardsdatascience.com/how-to-print-hello-...
Hvem kan finde flest tilfælde af dårlig stil i de eksempler?
C: "#include<stdio.h>" burde være "#include <stdio.h>". main(void) kan skrives som main()
C++: "using namespace std" er ofte betragtet som dårlig stil. "return 0" er heller ikke nødvendigt.
(Og umiddelbart ville jeg argumentere for K&R stil for brackets i C og C++)
C#: Lowercase namespace er forkert.
... og så mangler der \n (newline) i halvdelen af eksemplerne
C++: "using namespace std" er ofte betragtet som dårlig stil. "return 0" er heller ikke nødvendigt.
(Og umiddelbart ville jeg argumentere for K&R stil for brackets i C og C++)
C#: Lowercase namespace er forkert.
... og så mangler der \n (newline) i halvdelen af eksemplerne
#2 Nu vi snakker om stil går jeg stærkt ind for at bruge (void) ved funktioner uden inputs i C. Med () roder man sig ud i den gamle funktion syntaks og mulige overraskelser. Jeg har også set compilere brokke sig over ().
Jeg ville nok have skrevet den sædvanlige int main(int argc, char *argv[])
Jeg ville nok have skrevet den sædvanlige int main(int argc, char *argv[])
C standarden nævner kun:
int main(void)
og:
int main(int argc, char *argv[])
Men:
int main()
er ret brugt.
Der er meget gode grunde til at lave en funktions prototype med (void) fremfor (), da (void) betyder ingen argumenter mens () betyder vilkårligt antal argumenter (i C - ikke i C++).
Men der er nok ikke så vigtigt for main.
int main()
{
return 0;
}
void f()
{
main(1, 2, 3, 4, 5);
}
compiler men:
int main(void)
{
return 0;
}
void f()
{
main(1, 2, 3, 4, 5);
}
giver fejl - imidlertid er chance for at se den konstruktion i den virkelige verden nok meget lille.
int main(void)
og:
int main(int argc, char *argv[])
Men:
int main()
er ret brugt.
Der er meget gode grunde til at lave en funktions prototype med (void) fremfor (), da (void) betyder ingen argumenter mens () betyder vilkårligt antal argumenter (i C - ikke i C++).
Men der er nok ikke så vigtigt for main.
int main()
{
return 0;
}
void f()
{
main(1, 2, 3, 4, 5);
}
compiler men:
int main(void)
{
return 0;
}
void f()
{
main(1, 2, 3, 4, 5);
}
giver fejl - imidlertid er chance for at se den konstruktion i den virkelige verden nok meget lille.
#10
Jeg fandt et eksempel for at par år siden:
Jeg fandt et eksempel for at par år siden:
I notice that the result is wrong (two non-existing blank
lines).
It seems obvious that it must be due to handling of
CRLF.
But a quick look of the code showed that CRLF should
be treated like LF.
On the other hand the C code in question also
reminded my about how obscure C code can be.
static void unescape_url(char *url) {
register int x,y;
for(x=0,y=0;url[y];++x,++y) {
if((url[x] = url[y]) == '%') {
url[x] = x2c(&url[y+1]);
y+=2;
if(url[x] == '\r') {
if(url[y] == '%' && x2c(&url[y+1]) == '\n')
/* Ignore the CR in CRLFs */
x--;
else
/* Convert lone CR to LF */
url[x] = '\n';
}
}
}
url[x] = '\0';
}
And there is a bug.
if(url[y] == '%' && x2c(&url[y+1]) == '\n')
should be:
if(url[y+1] == '%' && x2c(&url[y+2]) == '\n')
[line 661 in SET_DCL_ENV.C for those that want to fix]
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.