Re: Why?? (prog question)



On Tue, Mar 31, 2009 at 11:21:22AM +0200, Polytropon wrote:
I don't want to start a "style debate", but forgive me the
following annotations:

1. Use the tab character for indentation. You can set its
length with your favourite editor (e. g. mcedit: F9,
Options, General; joe: ^TD). Don't waste with spaces.


Ja, been doing this since 1978. Does anybody hit space-key
8 times!?


2. The main() function should be declared as
int main(int argc, char *argv[])
or
int main(int argc, char **argv)
Note that it's returning (int). Use this functionality.


I've come to prefer the *char argv[] ... I didn't use the formal int
return because this was supposed throwaway code. (Going on years now
tho, so ... my-bad.)


3. In case of errors (e. g. incorrect number of parameters)
use fprintf() to stderr, or perror() with the builtin
error handling (e. g. for "file not found" by fopen()).

4. Use the predefined return codes, don't hardcode them.
FreeBSD has EXiT_SUCCESS and EXIT_FAILURE, they're for
maximum compatibility (such as with Linux). There are
more exit codes for differentiation, but they're specific
to FreeBSD, as far as I know.


This I did not know. I have a prefab include file with a bunch
of my own similar #defines. Wow, great!


5. This is highly debatable: Use a good style for { and }.


Well, you're using the K&R { }; but for me, the "Ingres"
style [[ yes, it was invented by someone else ]] gets my vote.
I scan
{
and
}

more easily. 6 of one, half-dozen of another... .

6. Use delimiters around operators, e. g. buf[strlen(buf) - 1]
instead of buf[strlen(buf)-1]; increases readability.


Yup.


Here is the program again, with some stylistic modifications
and the "correct" (read: recommended, usual) exit code handling:



I'll swipe this. I use this code with openoffice and abiword
because I compose with vi; but I almost always forget to run
my text thru joinlines and have to quit the word processor, run
jlines <foo> bar; mv bar foo; then restart the word processor.
I figure that I've spend several centuries of my lifetime messing
with jlines, so i'm overdue for doing it right....

gary




/*
* simple prog to join all | very nearly all lines of a text file
* that make up one paragraph into one LONG line.
*
* paragraphs are delimiated by a single \n break.
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char buf[65536];


if(argc == 1) {
fprintf(stderr, "Usage: %s < file > newfile\n", argv[0]);
exit(EXIT_FAILURE);
}

while (fgets(buf, sizeof buf, stdin)) {
if(*buf == '\n') {
fprintf(stdout, "\n\n");
} else {
buf[strlen(buf) - 1] = ' ';
fputs(buf, stdout);
}
}

return EXIT_SUCCESS;
}





Note that compiling with -Wall (always a good option) doesn't
show any warning.



I read my advices again... makes me sound sooooo old! :-)



--
Polytropon
From Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...

--
Gary Kline kline@xxxxxxxxxxx http://www.thought.org Public Service Unix
http://jottings.thought.org http://transfinite.thought.org
The 2.41a release of Jottings: http://jottings.thought.org/index.php

_______________________________________________
freebsd-questions@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscribe@xxxxxxxxxxx"



Relevant Pages