Hi all,
As per our coding rule, a line should not have more than 80 characters.
When accessing a structure elements which are deeply nested, we are not
able follow this rule. To acheive this Can we use macro?
For example,
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3;
#define STRUCT2 struct2.str2.st1.s1
#define STRUCT3 struct3.str3.st3.s3
and then use
struct1.str1.strct3 = STRUCT2 + STRUCT3;
Is this a good Idea(if not please let me know what are the problems it
may cause)?Or Is there a better Idea than this? 18 1343
On Mon, 3 Apr 2005 va******@rediffmail.com wrote: Hi all, As per our coding rule, a line should not have more than 80 characters. When accessing a structure elements which are deeply nested, we are not able follow this rule. To acheive this Can we use macro?
Oh, dear.
For example,
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3;
First of all, that's fewer than 80 columns. Secondly, the C programming
language is whitespace-insensitive (in most ways), so you can always write
struct1.str1.strct3 = struct2.str2.st1.s1
+ struct3.str3.st3.s3;
A much better alternative is to rework your data structure, and use the
much simpler
x = y + z;
Of course, this will require getting rid of a lot of tiny intermediate
struct definitions (struct1, str1, st1, s1, and so on). But that's a
very good thing. Nested structs are bad for readability, and mostly bad
for thinking in general.
If you can't do that (for example, if you have more silly "house rules"
that require lots of nested data structures), you can use
struct foo *p = &struct2.str2.st1;
struct foo *q = &struct3.str3.st3;
struct1.str1.strct3 = p->s1 + q->s3;
Again, not the best solution, but a darn sight better than trying to
use the preprocessor to wiggle out of a problem you yourself created
with nested data structures.
HTH,
-Arthur va******@rediffmail.com writes: As per our coding rule, a line should not have more than 80 characters. When accessing a structure elements which are deeply nested, we are not able follow this rule. To acheive this Can we use macro?
For example,
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3;
#define STRUCT2 struct2.str2.st1.s1 #define STRUCT3 struct3.str3.st3.s3
and then use
struct1.str1.strct3 = STRUCT2 + STRUCT3;
Is this a good Idea(if not please let me know what are the problems it may cause)?Or Is there a better Idea than this?
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3;
is obviously less than 80 columns, but assuming it's meant as an
example, there's no reason it all has to be on one line. The
following are equivalent:
struct1.str1.strct3 =
struct2.str2.st1.s1 + struct3.str3.st3.s3;
struct1.str1.strct3 =
struct2.str2.st1.s1 +
struct3.str3.st3.s3;
struct1
.str1
.strct3
=
struct2
.str2
.st1
.s1
+
struct3
.str3
.st3
.s3;
It would probably be even better to restructure your code so you're
not using so many deeply nested structures.
--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
Keith Thompson wrote: struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
I prefer to start, rather than to terminate,
a continued line with a binary operator,
to make it more obvious that it's a continued line.
struct1.str1.strct3
= struct2.str2.st1.s1
+ struct3.str3.st3.s3;
--
pete va******@rediffmail.com wrote: Hi all, As per our coding rule, a line should not have more than 80 characters. When accessing a structure elements which are deeply nested, we are not able follow this rule. To acheive this Can we use macro?
For example,
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3;
#define STRUCT2 struct2.str2.st1.s1 #define STRUCT3 struct3.str3.st3.s3
and then use
struct1.str1.strct3 = STRUCT2 + STRUCT3;
Is this a good Idea
No.
(if not please let me know what are the problems it may cause)?
Difficult to read, difficult to debug when it goes wrong.
Or Is there a better Idea than this?
Use a C99 compiler or a compiler that understand inline and
use something like
static inline void
struct_add (STRUCT_NAME *result, const STRUCT_NAME *left, const STRUCT_NAME *right)
{ result->whatever.result = left->x.y.z + right->x.y.z ;
}
and you can call that using:
struct_add (&result, &left, &right) ;
if they are defined as structs or
struct_add (result, left, right) ;
if you already have pointers to the structs.
Erik
--
+-----------------------------------------------------------+
Erik de Castro Lopo no****@mega-nerd.com (Yes it's valid)
+-----------------------------------------------------------+
Learning Linux is like joining a cult. Sure it's fun at first but
you waste time, become brainwashed, and then have to be de-programmed
by Bill Gates before you can work for Him again.
- Ray Lopez, in UF********************@newsread1.prod.itd.earthlin k.net va******@rediffmail.com wrote: As per our coding rule, a line should not have more than 80 characters. When accessing a structure elements which are deeply nested, we are not able follow this rule. To acheive this Can we use macro?
For example,
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3;
#define STRUCT2 struct2.str2.st1.s1 #define STRUCT3 struct3.str3.st3.s3
and then use
struct1.str1.strct3 = STRUCT2 + STRUCT3;
Is this a good Idea(if not please let me know what are the problems it may cause)?Or Is there a better Idea than this?
Not in my opinion. It shows up the lack of a 'with' statement in
C, but that is another matter. You can simply break the statement
up:
struct1.str1.strct3 = struct2.str2.st1.s1
+ struct3.str3.st3.s3;
I also consider an 80 char line length excessive, 72 is better. If
you are continuously falling off the right it probably indicates
that you are failing to break your code up into small enough
modules.
--
"If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson va******@rediffmail.com wrote: Hi all, As per our coding rule, a line should not have more than 80 characters. When accessing a structure elements which are deeply nested, we are not able follow this rule. To acheive this Can we use macro?
For example,
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3;
Others have mentioned various ways of inserting line
breaks to keep individual lines short, but I have not yet
seen anything as radical as
struct1
On Mon, 04 Apr 2005 11:34:58 +0000, CBFalconer wrote:
.... Not in my opinion. It shows up the lack of a 'with' statement in C, but that is another matter.
IMO Pascal's with statement is one of the truely nasty parts of that
language. C has a vastly better way of dealing with that problem using
pointers to structures or unions. In effect you can create a with
construct where each structure being aliased is named explicitly.
You can simply break the statement up:
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
Yes, there are lots of ways of handling this, this looks good here.
Intermediaries could be appropriate in some circumstances, e.g.
s2211 = struct2.str2.st1.s1;
s3333 = struct3.str3.st3.s3;
struct1.str1.strct3 = s2211 + s3333;
Using with-like pointers could be natural if you access a number of
members from an innermost structure
type *const p221 = &struct2.str2.st1;
type *const p333 = &struct3.str3.st3;
struct1.str1.strct3 = p221->s1 + p333->s3;
struct2.str3.strct1 = p221->s3 + p333->s1; /* for example */
This can work for the LHS too.
I also consider an 80 char line length excessive, 72 is better. If you are continuously falling off the right it probably indicates that you are failing to break your code up into small enough modules.
It is very easy to get to and beyond 80 columns, although I try to limit
myself to that for C code. It depends on indentation amount, expression
complexity, whether you have some reasonable length text in string
literals and so on. Making modules (do you mean functions?) too small is
not a good thing, it creates complexity in the interfaces and call tree.
Lawrence
On Mon, 04 Apr 2005 09:50:17 GMT, pete <pf*****@mindspring.com> wrote: Keith Thompson wrote:
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
I prefer to start, rather than to terminate, a continued line with a binary operator, to make it more obvious that it's a continued line.
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
An interesting take. I generally read code from top to bottom, so
prefer the binary operator on the end of the line, to make it more
obvious that there's more to come.
--
Al Balmer
Balmer Consulting re************************@att.net
Keith Thompson wrote: As per our coding rule, a line should not have more than 80 characters. When accessing a structure elements which are deeply nested, we are not able follow this rule. To acheive this Can we use macro?
For example,
struct1.str1.strct3=struct2.str2.st1.s1 + struct3.str3.st3.s3; ... ... is obviously less than 80 columns, but assuming it's meant as an example, there's no reason it all has to be on one line. The following are equivalent:
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
struct1 .str1 .strct3 = struct2 .str2 .st1 .s1 + struct3 .str3 .st3 .s3; ...
And there's always the '\' at the end of line, which greatly expands the
number of variants this code can be reformatted
struct1.s\
tr1.strct\
3 = struc\
t2.str2.s\
t1.s1 + s\
truct3.st\
r3.st3.s3;
Of course, professional programmers always format their code so that the
way the code looks reflects what this code does. The above, for example,
is a nice way to format a code that calculates the area of a rectangle.
:)
--
Best regards,
Andrey Tarasevich
In article <mn***********************@YOURBRAnoos.fr>,
Emmanuel Delahaye <em***@YOURBRAnoos.fr> wrote: pete wrote on 04/04/05 : I prefer to start, rather than to terminate, a continued line with a binary operator, to make it more obvious that it's a continued line.
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
Agreed.
FORTRAN lives ;-)
(and, no, I didn't mean "Fortran").
--
Usenet is like a slice of lemon, wrapped around a large gold brick.
pete wrote on 04/04/05 : Keith Thompson wrote:
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
I prefer to start, rather than to terminate, a continued line with a binary operator, to make it more obvious that it's a continued line.
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
Agreed.
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
..sig under repair
On Mon, 04 Apr 2005 10:17:19 -0700, Alan Balmer
<al******@att.net> wrote: On Mon, 04 Apr 2005 09:50:17 GMT, pete <pf*****@mindspring.com> wrote:
Keith Thompson wrote:
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
I prefer to start, rather than to terminate, a continued line with a binary operator, to make it more obvious that it's a continued line.
struct1.str1.strct3 = struct2.str2.st1.s1 + struct3.str3.st3.s3;
An interesting take. I generally read code from top to bottom, so prefer the binary operator on the end of the line, to make it more obvious that there's more to come.
I do as well, but it's a style thing (roughly half of us at work prefer
the operators at the end and the others prefer them at the start of the
next line).
There is no "one true way"...
Chris C
Chris Croughton wrote: There is no "one true way"...
You're new around here, aren't you?
--
================================================== ======================
Ian Pilcher i.*******@comcast.net
================================================== ======================
In article <yN********************@comcast.com>,
Ian Pilcher <i.*******@comcast.net> wrote:
:Chris Croughton wrote:
:> There is no "one true way"...
:You're new around here, aren't you?
Apparently, for half of us, it would have been fine if you had written,
You
're new around here
, aren't you?
--
"[...] it's all part of one's right to be publicly stupid." -- Dave Smey
"CBFalconer" <cb********@yahoo.com> wrote in message
news:42***************@yahoo.com... va******@rediffmail.com wrote:
I also consider an 80 char line length excessive, 72 is better.
Yes, please. My Teletype is only 72 columns...
Rufus
On Thu, 7 Apr 2005 11:01:30 -0400, in comp.lang.c , "Rufus V. Smith"
<no****@nospam.com> wrote: "CBFalconer" <cb********@yahoo.com> wrote in message news:42***************@yahoo.com... va******@rediffmail.com wrote:
I also consider an 80 char line length excessive, 72 is better.
Yes, please. My Teletype is only 72 columns...
you should try reading
this stuff on an
internet-enabled
digital watch....
--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.ungerhu.com/jxh/clc.welcome.txt>
In article <1112886039.35604f388b6a67a07b1128bf3c3273d9@teran ews>, 0001
Rufus V. Smith <no****@nospam.com> wrote: 0002 I also consider an 80 char line length excessive, 72 is better. 0003
0004Yes, please. My Teletype is only 72 columns... 0005
0006
And for those of us using punched cards, if you use more than 72 0007
characters it will run in to the sequence numbers. 0008
0009
-- Richard 0010
0011
"Rufus V. Smith" wrote: "CBFalconer" <cb********@yahoo.com> wrote in message va******@rediffmail.com wrote:
I also consider an 80 char line length excessive, 72 is better.
Yes, please. My Teletype is only 72 columns...
Mine too. However 72 also allows for 80 char text output after
inserting line numbers, and avoids most line wrapping when quoted
on usenet, etc. etc. In fact I try to limit my lines to 65 chars.
This also tends to increase legibility.
--
"If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Eric S. Johansson |
last post by:
I have an application where I need a very simple database, effectively a
very large dictionary. The very large dictionary must be accessed from
multiple processes simultaneously. I need to be...
|
by: news |
last post by:
I seriously doubt this is possible...but you never know, so here goes.
Due to bad pre-planning I have a Web page that is VERY table heavy with
a very complicated and delicate setup. Any changes...
|
by: Ondine |
last post by:
Hi
I have a client running an Access 2000 database on a small network
with 3 pc's. Two of the laptop pcs have a data replica, which they
use when not connected to the network, the 'server'...
|
by: AAA |
last post by:
I want to start programming in MS Visual C++. I understand that .NET is
required? Or do I have to get MSStudio to integrate my work into the NET
frame work? And any idea when VS 2005 is going to...
|
by: BethInAK |
last post by:
Thank you in advance for any possible help you have to offer, before I
pull my hair out!
I am incredibly frustrated attempting to learn asp.net. Its really
pissing me off. Please help.
...
|
by: Steve R. Hastings |
last post by:
I have been studying Python recently, and I read a comment on one
web page that said something like "the people using Python for heavy math
really wish they could define their own operators". The...
|
by: Marc |
last post by:
How could I directly trigger a very simple on localhost and a known port
listening server from my internet browser client? Local host means the
little server would be running on the client machine,...
|
by: lovecreatesbeauty |
last post by:
`Writing C code is very simple', one guy related to my work said.
I'm not sure whether he is an expert or not. What he said about C
programming like this can't convince me. I think there should be...
|
by: steve yee |
last post by:
i think c should adapt c++ template standard, as well as namespace. if
so, c can replace c++ in many cases.
|
by: Faith0G |
last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
|
by: ryjfgjl |
last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
|
by: taylorcarr |
last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: ryjfgjl |
last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
|
by: ryjfgjl |
last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
| |