473,323 Members | 1,537 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,323 software developers and data experts.

K&R2 1-23

The exercise is to remove all comments from a source file. What I've
written so far is:

/* decommentizer: removes this style of comment from source */
#include <stdio.h>

void strconst(char);
void quotestr(char);
void decomment(void);

int main(void)
{
int c;
while((c = getchar())) != EOF)
{

I'm not sure if I've thought correctly through the cases. For example, I'm
reasonably certain that the function that handles quoted strings will simply
putchar() until it hits another " . I've got myself talked into the same
being the case with character constants. If so, I could reduce the number
of prototype declarations above and either pass " or ' and have the called
function do the same thing. My other question is what other ISO-conforming,
syntactically-legal things can follow a / besides an * . I don't believe
that / is an answer to this question. MPJ


Nov 14 '05 #1
16 1429
Merrill & Michele wrote:
The exercise is to remove all comments from a source file. What I've
written so far is:

/* decommentizer: removes this style of comment from source */
#include <stdio.h>

void strconst(char);
void quotestr(char);
void decomment(void);

int main(void)
{
int c;
while((c = getchar())) != EOF)
{ /*
** Code doing the work.
*/
}
}

Does not cost much and is compilable :-)

I'm not sure if I've thought correctly through the cases. For example, I'm
reasonably certain that the function that handles quoted strings will simply
putchar() until it hits another " . I've got myself talked into the same
being the case with character constants. If so, I could reduce the number
of prototype declarations above and either pass " or ' and have the called
function do the same thing. My other question is what other ISO-conforming,
syntactically-legal things can follow a / besides an * . I don't believe
that / is an answer to this question. MPJ


If you restrict yourself to the exercise, there are no C++/C99 line
comments (//).

Your cases have also to take care of things like not "leaving" a string
literal on \" but on \\", for example (expansion to/checking for other
cases left to you :-)).

Hint: Introduce a variable indicating the state (outside/in comment/in
string/in character constant). (You seem to have planned doing that but
did not explicitly mention it.)
Cheers
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.
Nov 14 '05 #2
"Michael Mair"
Merrill & Michele wrote:
The exercise is to remove all comments from a source file. What I've
written so far is:

/* decommentizer: removes this style of comment from source */
#include <stdio.h>

void strconst(char);
void quotestr(char);
void decomment(void);

int main(void)
{
int c;
while((c = getchar())) != EOF)
{

/*
** Code doing the work.
*/
}
}

Does not cost much and is compilable :-)

I'm glad I checked at this point for wrong-headed thinking insttead of
coding away, as it saved the embarrassment and you the "ugghhh is this guy
ever going to learn?"
I'm not sure if I've thought correctly through the cases. For example, I'm reasonably certain that the function that handles quoted strings will simply putchar() until it hits another " . I've got myself talked into the same being the case with character constants. If so, I could reduce the number of prototype declarations above and either pass " or ' and have the called function do the same thing. My other question is what other ISO-conforming, syntactically-legal things can follow a / besides an * . I don't believe that / is an answer to this question. MPJ


If you restrict yourself to the exercise, there are no C++/C99 line
comments (//).

Your cases have also to take care of things like not "leaving" a string
literal on \" but on \\", for example (expansion to/checking for other
cases left to you :-)).

Hint: Introduce a variable indicating the state (outside/in comment/in
string/in character constant). (You seem to have planned doing that but
did not explicitly mention it.)

I didn't. I had this silly logic edifice instead. Back to work. MPJ
Nov 14 '05 #3
On Mon, 6 Dec 2004 12:05:48 -0600, Merrill & Michele
<be********@comcast.net> wrote:
I'm not sure if I've thought correctly through the cases. For example, I'm
reasonably certain that the function that handles quoted strings will simply
putchar() until it hits another " .
Escaped quotes in strings and character constants?
I've got myself talked into the same
being the case with character constants. If so, I could reduce the number
of prototype declarations above and either pass " or ' and have the called
function do the same thing.
Yes, I often do that, pass the start character to be used as the end
character and treat strings and character constants the same otherwise.
My other question is what other ISO-conforming,
syntactically-legal things can follow a / besides an * . I don't believe
that / is an answer to this question. MPJ


Believe it, it's what the ISO C spec. says. As worded, of course, the
answer is "almost anything" (a = b/-c; for example). But what I think
you mean is "What can follow / as a valid token?", and the answer to
that is * or /. And don't forget line joining (\ followed by newline)
in line comments started with //.

Chris C
Nov 14 '05 #4
"Chris Croughton"
MPJ:
I'm not sure if I've thought correctly through the cases. For example, I'm reasonably certain that the function that handles quoted strings will simply putchar() until it hits another " .
Escaped quotes in strings and character constants?


I think I've got this covered.
I've got myself talked into the same
being the case with character constants. If so, I could reduce the number of prototype declarations above and either pass " or ' and have the called function do the same thing.


Yes, I often do that, pass the start character to be used as the end
character and treat strings and character constants the same otherwise.
My other question is what other ISO-conforming,
syntactically-legal things can follow a / besides an * . I don't believe that / is an answer to this question. MPJ


Believe it, it's what the ISO C spec. says. As worded, of course, the
answer is "almost anything" (a = b/-c; for example). But what I think
you mean is "What can follow / as a valid token?", and the answer to
that is * or /. And don't forget line joining (\ followed by newline)
in line comments started with //.


Thanks for replying. Let me come up with some code before a C89-ISO
fisticuffs breaks out. MPJ
Nov 14 '05 #5
Merrill & Michele wrote:

The exercise is to remove all comments from a source file. What I've
written so far is:

/* decommentizer: removes this style of comment from source */
#include <stdio.h>

void strconst(char);
void quotestr(char);
void decomment(void);

int main(void)
{
int c;
while((c = getchar())) != EOF)
{

I'm not sure if I've thought correctly through the cases. For example,
I'm reasonably certain that the function that handles quoted strings
will simply putchar() until it hits another " . I've got myself talked
into the same being the case with character constants. If so, I could
reduce the number of prototype declarations above and either pass " or
' and have the called function do the same thing. My other question is
what other ISO-conforming, syntactically-legal things can follow a /
besides an * . I don't believe that / is an answer to this question.
MPJ


This came up a while ago and I posted my solution. It is also
available on my site as:

<http://cbfalconer.home.att.net/download/uncmntc.zip>

--
Chuck F (cb********@yahoo.com) (cb********@worldnet.att.net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home.att.net> USE worldnet address!
Nov 14 '05 #6

"CBFalconer" <cb********@yahoo.com> wrote in message
news:41***************@yahoo.com...
Merrill & Michele wrote:

The exercise is to remove all comments from a source file. What I've
written so far is:

/* decommentizer: removes this style of comment from source */
#include <stdio.h>

void strconst(char);
void quotestr(char);
void decomment(void);

int main(void)
{
int c;
while((c = getchar())) != EOF)
{

I'm not sure if I've thought correctly through the cases. For example,
I'm reasonably certain that the function that handles quoted strings
will simply putchar() until it hits another " . I've got myself talked
into the same being the case with character constants. If so, I could
reduce the number of prototype declarations above and either pass " or
' and have the called function do the same thing. My other question is
what other ISO-conforming, syntactically-legal things can follow a /
besides an * . I don't believe that / is an answer to this question.
MPJ


This came up a while ago and I posted my solution. It is also
available on my site as:

<http://cbfalconer.home.att.net/download/uncmntc.zip>


Do you give permission to excerpt in clc? MPJ
Nov 14 '05 #7
Merrill & Michele wrote:
"CBFalconer" <cb********@yahoo.com> wrote in message
Merrill & Michele wrote:

The exercise is to remove all comments from a source file. What I've
written so far is:

/* decommentizer: removes this style of comment from source */
#include <stdio.h>

void strconst(char);
void quotestr(char);
void decomment(void);

int main(void)
{
int c;
while((c = getchar())) != EOF)
{

I'm not sure if I've thought correctly through the cases. For example,
I'm reasonably certain that the function that handles quoted strings
will simply putchar() until it hits another " . I've got myself talked
into the same being the case with character constants. If so, I could
reduce the number of prototype declarations above and either pass " or
' and have the called function do the same thing. My other question is
what other ISO-conforming, syntactically-legal things can follow a /
besides an * . I don't believe that / is an answer to this question.
MPJ


This came up a while ago and I posted my solution. It is also
available on my site as:

<http://cbfalconer.home.att.net/download/uncmntc.zip>


Do you give permission to excerpt in clc? MPJ


I published it here before, and if you examine the source you will
see I have released it to the public domain. Enjoy.

--
Chuck F (cb********@yahoo.com) (cb********@worldnet.att.net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home.att.net> USE worldnet address!
Nov 14 '05 #8

"CBFalconer" <cb********@yahoo.com> wrote in message
news:41***************@yahoo.com...
Merrill & Michele wrote:
"CBFalconer" <cb********@yahoo.com> wrote in message
This came up a while ago and I posted my solution. It is also
available on my site as:

<http://cbfalconer.home.att.net/download/uncmntc.zip>


Do you give permission to excerpt in clc? MPJ


I published it here before, and if you examine the source you will
see I have released it to the public domain. Enjoy.


What follows is uncmntc.c's function call to get rid of end of line comments
and then a couple questions.

/* gobble chars until EOLine or EOF. i.e. // comments */
static int eolcomment(void)
{
int ch, lastch;

ch = '\0';
do {
lastch = ch;
if (EOF == (ch = fgetc(stdin))) return EOF;
} while (!(('\n' == ch) && ('\\' != lastch)));
return ch;
} /* eolcomment */

Q1) This function is at file scope and preceded by the word static. EVERY
function at file scope I've looked at that has been written by an
experienced programmer does this. Can somebody tell me in what situation
one would NOT do this?

Q2) I'm having trouble with the second condition tested in the while
statement: ('\\' .... Is that testing for a literal backslask or is there
something about the EOL comment I don't know yet.
(I am aware that ISO has
// ... \
bla bla bla \
bla end bla
all three of the above lines necessarily commented out.)

Nov 14 '05 #9
On Tue, 7 Dec 2004 08:25:44 -0600, Merrill & Michele
<be********@comcast.net> wrote:
Q1) This function is at file scope and preceded by the word static. EVERY
function at file scope I've looked at that has been written by an
experienced programmer does this. Can somebody tell me in what situation
one would NOT do this?
You evidently haven't looked at much code, because main() is a function
declared at file scope and doesn't have static! Have you ever looked at
code for a multi-file program?

The use of static in this sense means that the function is limited to
file scope. If you leave it off then it will be visible from other
compilation units, so if you have a function which is called from
another compilation unit (like main()) then it will not have the static
keyword. If you want to hide it from another compilation unit then use
static, if you want to reference a function in another compilation unit
use extern (the same goes for variables).
Q2) I'm having trouble with the second condition tested in the while
statement: ('\\' .... Is that testing for a literal backslask or is there
something about the EOL comment I don't know yet.
(I am aware that ISO has
// ... \
bla bla bla \
bla end bla
all three of the above lines necessarily commented out.)


Yes, '\\' is a backslash character, the code is saying "I've found a
newline, if it was immediately preceded by a backslash then don't treat
is as the end of the comment".

Chris C
Nov 14 '05 #10
"Chris Croughton"
Merrill & Michele <be********@comcast.net> wrote:
Q1) This function is at file scope and preceded by the word static. EVERY function at file scope I've looked at that has been written by an
experienced programmer does this. Can somebody tell me in what situation one would NOT do this?


You evidently haven't looked at much code, because main() is a function
declared at file scope and doesn't have static! Have you ever looked at
code for a multi-file program?


Only in texts.
The use of static in this sense means that the function is limited to
file scope. If you leave it off then it will be visible from other
compilation units, so if you have a function which is called from
another compilation unit (like main()) then it will not have the static
keyword. If you want to hide it from another compilation unit then use
static, if you want to reference a function in another compilation unit
use extern (the same goes for variables).


I guess what I can't think of is when you would use it, unless you compiled
the units at different times and didn't have the source handy to reshuffle
the functions.
Q2) I'm having trouble with the second condition tested in the while
statement: ('\\' .... Is that testing for a literal backslask or is there something about the EOL comment I don't know yet.
(I am aware that ISO has
// ... \
bla bla bla \
bla end bla
all three of the above lines necessarily commented out.)


Yes, '\\' is a backslash character, the code is saying "I've found a
newline, if it was immediately preceded by a backslash then don't treat
is as the end of the comment".


And ISO stipulates that the only way to carry that eol comment on to the
next line is '\\' followed by '\n'? (No white space, e.g.) MPJ
Nov 14 '05 #11
Merrill & Michele wrote:

I guess what I can't think of is when you would use it, unless you compiled
the units at different times and didn't have the source handy to reshuffle
the functions.

You should always use it unless you have reason not to. So the choice is
not when to use it, but when not to use it. Also is better to add it
and find out later that the function is probably better of without it
than the other way around.

Basically, all functions used internally in a module should be static
and all the functions which comprise the interface/API of the module
should not be static. This is similar to private and public
attributes in some mainstream OO languages like Java and C++.

--
Thomas.
Nov 14 '05 #12
Merrill & Michele wrote:
"CBFalconer" <cb********@yahoo.com> wrote in message
Merrill & Michele wrote:
"CBFalconer" <cb********@yahoo.com> wrote in message This came up a while ago and I posted my solution. It is also
available on my site as:

<http://cbfalconer.home.att.net/download/uncmntc.zip>

Do you give permission to excerpt in clc? MPJ
I published it here before, and if you examine the source you will
see I have released it to the public domain. Enjoy.


What follows is uncmntc.c's function call to get rid of end of line
comments and then a couple questions.

/* gobble chars until EOLine or EOF. i.e. // comments */
static int eolcomment(void)
{
int ch, lastch;

ch = '\0';
do {
lastch = ch;
if (EOF == (ch = fgetc(stdin))) return EOF;
} while (!(('\n' == ch) && ('\\' != lastch)));
return ch;
} /* eolcomment */

Q1) This function is at file scope and preceded by the word static.
EVERY function at file scope I've looked at that has been written by
an experienced programmer does this. Can somebody tell me in what
situation one would NOT do this?


When one expects the function to be used (called) from outside that
compilation unit. The static word keeps the function name from
polluting the linker name space, so the name is freely available in
other modules/compilation units. In this case it makes little
difference, since there are no other compilation units, but it
means I can freely copy the entire function into something else if
I wish. And if I modify the module into something else, I have not
forgotten to isolate purely file local scope functions.

Q2) I'm having trouble with the second condition tested in the
while statement: ('\\' .... Is that testing for a literal
backslask or is there something about the EOL comment I don't
know yet. (I am aware that ISO has
// ... \
bla bla bla \
bla end bla
all three of the above lines necessarily commented out.)


It's not a while statement, it is a "do while" statement, which is
quite a different animal. Yes, it is testing for a literal
backslash, and thus for the sort of continuation line you
demonstrate above. Overall it simply ignores a '\n' immediately
preceded by a backslash.

--
Chuck F (cb********@yahoo.com) (cb********@worldnet.att.net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home.att.net> USE worldnet address!
Nov 14 '05 #13
"Merrill & Michele" <be********@comcast.net> writes:
[...]
And ISO stipulates that the only way to carry that eol comment on to the
next line is '\\' followed by '\n'? (No white space, e.g.) MPJ


Yes, the backslash must be the last character on the line to be treated
as a continuation character.

This is a valid assignment statement (assuming an appropriate
definition for x):

x = \
42;
This is not:

x = \
42;

In my opinion, this is a flaw in the language; a backslash should be
treated as a continuation character even when followed by whitespace.

--
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.
Nov 14 '05 #14
"Keith Thompson"
"Merrill & Michele" <be********@comcast.net> writes:

[...]
And ISO stipulates that the only way to carry that eol comment on to the
next line is '\\' followed by '\n'? (No white space, e.g.) MPJ


Yes, the backslash must be the last character on the line to be treated
as a continuation character.

This is a valid assignment statement (assuming an appropriate
definition for x):

x = \
42;
This is not:

x = \
42;

In my opinion, this is a flaw in the language; a backslash should be
treated as a continuation character even when followed by whitespace.


We'll save the discussion for down the hallway. If I read you correctly,
'\\' must be followed immediately by '\n' to extend an eol comment. If
true, then no reply is requested. MPJ
Nov 14 '05 #15
On Tue, 7 Dec 2004 14:25:44 UTC, "Merrill & Michele"
<be********@comcast.net> wrote:
/* gobble chars until EOLine or EOF. i.e. // comments */
static int eolcomment(void)
{
int ch, lastch;

ch = '\0';
do {
lastch = ch;
if (EOF == (ch = fgetc(stdin))) return EOF;
} while (!(('\n' == ch) && ('\\' != lastch)));
return ch;
} /* eolcomment */

Q1) This function is at file scope and preceded by the word static. EVERY
function at file scope I've looked at that has been written by an
experienced programmer does this. Can somebody tell me in what situation
one would NOT do this?
When the funcion can be called from outside the current translation
unit.
Q2) I'm having trouble with the second condition tested in the while
statement: ('\\' .... Is that testing for a literal backslask or is there
something about the EOL comment I don't know yet.
'\\' is a single backslash. As the backslach char is an escape char
one has to double it to get a single one to show the compiler that one
means the char itself, not the encoding that would occure by the next
one.

"\\" is a string containing at least one backslach char
"\\\\" a string containing two backslash chars"

'\n' is a single char that encoded means "end of line"
"\n" is the same char inside a string.
"\\n" is a string containing a single backslash char and a single
letter lower n.

So when you reads a C source char by char you would read
'\' - don't know yet if it is a backslash char or an encoded char.
You needs to read another char to decide what goes on.
When the next char is another '\' then there is nothing to do because
the 2 chars in common are an escaped escape char - meaning a single
'\'.

Interpreting a C source gives you a big problem: You has to decide and
to document if your program will understund only syntactically well
compilable code (relatively easy) or any crap a programmer may poduce
during typing the code (really complex), as this can hold any faulty
things, like unclosed strings like "string misses closed quotation
mark
'0 - a single char const - closed quotation mark missing
0xz1 - an illegal hex char
......
(I am aware that ISO has
// ... \
bla bla bla \
bla end bla
all three of the above lines necessarily commented out.)


Correct, yes.

//*.... is NOT a syntax error (longer token first: //, star is 1.
char in line comment!)
*/*... is end of block comment! (*/ followed by *)
*//*... end block commend followed by new block commend
*//... end block comment followed by division operator

// is C99 only - but legal extension of many C89 compilers!

"\"" a single quotation mark inside a string; one is escaped!
"/*" not a comment start
"*/" not a comment end
"//" not a line comment
"'" not a single single quotation mark
'"' not a single quotation mark

Don't get confused by:
\n readed as single char: new line in source
\n readed as \\+n (2 chars): symbolic new line. Compiler will
translate it to single char '\n'

When you have to eat syntax errors your job will be quite more
complex. The samples above are all legal - and may be still
incomplete.

Some hints:
Use a status variable that helps you to decide
- in plain text
- inside single line comment
- inside multiline comment
- inside string (no difference between initialiser, const string,
actual parameter....) string starts and ends with unquoted "
Your job is not to parse each and any token, but you have to hande
strings carfully to get not confused with strings looking like
comments and comments.

Hint: ungetc()/ungetchar() will put exactly ONE char given by you back
into the stream. That char can be any char, not only the last readed!
May help to identify multibyte tokens like /*, // and so on to get a
status change right.

Hint: you ran read EOF endless times without getting an error without
unget it.

--
Tschau/Bye
Herbert

Visit http://www.ecomstation.de the home of german eComStation
eComStation 1.2 Deutsch ist da!
Nov 14 '05 #16

"Michael Mair" <Mi**********@invalid.invalid> wrote in message
news:31*************@individual.net...
Merrill & Michele wrote:
The exercise is to remove all comments from a source file. What I've
written so far is:

/* decommentizer: removes this style of comment from source */
#include <stdio.h>

void strconst(char);
void quotestr(char);
void decomment(void);

int main(void)
{
int c;
while((c = getchar())) != EOF)
{

/*
** Code doing the work.
*/
}
}

Does not cost much and is compilable :-)

I'm not sure if I've thought correctly through the cases. For example, I'm reasonably certain that the function that handles quoted strings will simply putchar() until it hits another " . I've got myself talked into the same being the case with character constants. If so, I could reduce the number of prototype declarations above and either pass " or ' and have the called function do the same thing. My other question is what other ISO-conforming, syntactically-legal things can follow a / besides an * . I don't believe that / is an answer to this question. MPJ


If you restrict yourself to the exercise, there are no C++/C99 line
comments (//).

Your cases have also to take care of things like not "leaving" a string
literal on \" but on \\", for example (expansion to/checking for other
cases left to you :-)).

Hint: Introduce a variable indicating the state (outside/in comment/in
string/in character constant). (You seem to have planned doing that but
did not explicitly mention it.)


Coding took a different turn when it plopped down from on high. When I look
at Chuck's source, I am first of all presented with source I don't
understand. In such situations, I try to pretend like I'm the compiler. I
start by matching braces in main. I create a table:
open | close
1 3
2 4
3 5
4 7
6 8
7 2
8 1

The part you can't see is that I cross off the highest number on the left
when presented with a close brace and write the crossed-off number on the
right. That I end up with a one in the close column is a partial soln to
1-24. Now the question. Q) Given that clc has struggled lately with
topicality and that I've been part of the cause and part of the solution, I
would like to know whether a garden-variety compiler really goes about
business like this. I know darn well that a fella could write a compiler to
begin its business on a randomly-chosen byte; I'm trying to ramp up to 1-24,
nothing more. MPJ
Nov 14 '05 #17

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: David | last post by:
this phrase has been mentioned many times in this NG and it seems like everyone know what it's. is it a book? a standard? or a guide of some sort? where can i read more about K&R2? thanks!
12
by: Chris Readle | last post by:
Ok, I've just recently finished a beginning C class and now I'm working through K&R2 (alongside the C99 standard) to *really* learn C. So anyway, I'm working on an exercise in chapter one which...
16
by: TTroy | last post by:
I FOUND MAJOR ERRORS in K&R2 (making it almost useless for the herein mentioned topics). K&R2 Section 5.9 Pointers vs. Multidimension Arrays starts of like this... "Newcomers to C are...
3
by: Sunny | last post by:
Hi, Well this might look like a dumb question to 99.99% of u but what exactly is K&R2 and where can I get it? Secondly alot of people say that you can learn by reading good books on C. I know...
16
by: Josh Zenker | last post by:
This is my attempt at exercise 1-10 in K&R2. The code looks sloppy to me. Is there a more elegant way to do this? #include <stdio.h> /* copies input to output, printing */ /* series of...
2
by: arnuld | last post by:
there is a solution on "clc-wiki" for exercise 1.17 of K&R2: http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_1:Exercise_17 i see this uses pointers whereas K&R2 have not discussed pointers...
8
by: arnuld | last post by:
i have created a solutions myself. it compiles without any trouble and runs but it prints some strange characters. i am not able to find where is the trouble. ...
19
by: arnuld | last post by:
this programme runs without any error but it does not do what i want it to do: ------------- PROGRAMME -------------- /* K&R2, section 1.6 Arrays; Exercise 1-13. STATEMENT: Write a program...
24
by: Anthony Irwin | last post by:
Hi all, I have been going through the k&r2 book and all the examples are done with main() instead of int main(void) and k&r2 in the start of chapter 1 does not return 0 so I haven't yet either....
15
by: arnuld | last post by:
STATEMENT: Write the function strindex(s, t), which returns the position of the rightmost occurence of t in s, or -1 if there is none. PURPOSE: this program prints the index of the rightmost...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
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...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.