473,883 Members | 1,663 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

why still use C?

no this is no trollposting and please don't get it wrong but iam very
curious why people still use C instead of other languages especially C++.

i heard people say C++ is slower than C but i can't believe that. in pieces
of the application where speed really matters you can still use "normal"
functions or even static methods which is basically the same.

in C there arent the simplest things present like constants, each struct and
enum have to be prefixed with "struct" and "enum". iam sure there is much
more.

i don't get it why people program in C and faking OOP features(functi on
pointers in structs..) instead of using C++. are they simply masochists or
is there a logical reason?

i feel C has to benefit against C++.

--
cody

[Freeware, Games and Humor]
www.deutronium.de.vu || www.deutronium.tk
--
comp.lang.c.mod erated - moderation address: cl**@plethora.n et
Nov 13 '05
687 23872
"Joona I Palaste" <pa*****@cc.hel sinki.fi> wrote in message
news:bn******** **@oravannahka. helsinki.fi...
For the record -- and your C question is?


How can I get officially branded as a heathen too, without (1) marrying
anyone or (2) joining the Protestant Church?


(2) doesn't work -- the Catholics seem to recognize Protestants as
lowercase Christians. It was the fact that I never got baptized that
earned me my special registration.

You might try crashing a communion.

Or submit a DR and let WG14 answer the question for you.

P.J. Plauger
Dinkumware, Ltd.
http://www.dinkumware.com
Nov 13 '05 #371
"Richard Heathfield" <do******@addre ss.co.uk.invali d> wrote in message
news:bn******** **@hercules.bti nternet.com...
Indeed the first motivation we had for adding casts to malloc
calls was to satisfy a market need to have all our Standard C library
compile either as C or C++.
This "market need" - do you really mean "market demand"? (I can't think of
any particular /need/ for code to compile as both C and C++, but I can
certainly think of ways in which the marketplace might imagine such a
need.)


Customer perceived needs become market demands. I won't quibble over
wording.
The C++ Standard (thanks to me) deliberately
permits the C library to have either extern "C" or extern "C++" linkage --
and we have serious customers for both flavors. Having done so, we then
found reasons to make *all* of our C source code compilable as C++.


Well, this is indeed what you have said before, but I am not clear about
what those reasons actually /are/.


Some of our customers like having all their code in C++, others like it all
in C. We satisfy both with one source product.
Do you have an example of a cast that is not required for correctness but
which can nevertheless add to the portability of a program?
Others have pointed out the problems with flexible types such as clock_t.
Similar issues arise with int and char. (I'm stealing time from a WG14
meeting to generate this reply. Don't want to take the time to chase down
concrete examples. Besides, I agree with Sidney Cadot that this thread
is/should be running down.)
for C++ compatibility,


I am yet to be persuaded that you need anything other than extern "C" { }
for C++ compatibility.


Got that. We have customers who are persuaded otherwise. We make more money
if we give our customers what they ask for.
and to quiet silly warnings.


Wouldn't some kind of warning-processor do the job better? Why pollute the
code with casts that are not required for any other reason, merely to
silence a verbose compiler?


Once again, we have customers who demand that our code generate no warnings.
They don't want to hear that they have to postprocess diagnostic output.
I've tried to follow your English explanation, and I can't see anything
terribly difficult or esoteric about what you're doing that would justify a
malloc cast, so presumably I have misunderstood. Could you give us a
concrete C example instead, please? Thanks.
Others have given at least partial examples.
Well, I thank you for this explanation, but it doesn't actually explain
anything. For example, could you please give an example of "the kind [of
bugs] exposed by such casts [on malloc]" that are otherwise so expensive?


If my explanations to date don't actually explain anything to you, I
despair of further attempts.

P.J. Plauger
Dinkumware, Ltd.
http://www.dinkumware.com
Nov 13 '05 #372
Richard Heathfield wrote:
I am yet to be persuaded that
you need anything other than extern "C" { } for C++ compatibility.


What would persuade you?

Nothing guarantees that you will be able to link object files
created by another compiler into your C++ program
even if that compiler is another C++ compiler.
According to Bjarne Stroustrup,
"The C++ Programming Language: Third Edition",
Chapter 9: Source Files and Programs", Section 2: Linkage,
Subsection 4: Linkage to Non-C++ Code, page 205, "To help,
one can specify a /linkage/ convention
to be used in an /extern/ declaration.

The only way to ensure that you can link C code into your C++ program
is to compile it with the same C++ compiler.
The easiest and most reliable way to link C++ code into C programs
is to compile both of then with your C++ compiler.

Nov 13 '05 #373
Jeremy Yallop wrote:
Sidney Cadot wrote:
#include <stdio.h>
#include <stdlib.h>
{
char B[100], *p;
sprintf(B, "%p", malloc(20));
sscanf(B, "%p", (void **)p);

Undefined behaviour.


Oops! I have to disagree with your diagnosis though, this gives defined
compile-time behavior, since apart from the '&' I also left out the
main() declaration :-) This should fare better:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char B[100], *p;
sprintf(B, "%p", malloc(20));
sscanf(B, "%p", &p);
free(p);
return 0;
}

(Nothing in the standard forbids a buffer overflow, but let's ignore
that for a sec as too theoretical.)
Not a particularly good example in favour of using casts.


Not intended as such - that discussion is closed as far as I am
concerned. This is just a convoluted example of using malloc() without
assignment, and no memory leak. It's not a great deal more interesting
than the more obvious free(malloc(20) ) though.

Best regards,

Sidney
Nov 13 '05 #374
On Wed, 22 Oct 2003 02:28:47 GMT, "P.J. Plauger" <pj*@dinkumware .com>
wrote:
You must know something about us that we don't. I thought we had.


No, I just confused the uncast malloc with one where no prototype was in
scope. Sorry about that.
--
#include <standard.discl aimer>
_
Kevin D Quitt USA 91387-4454 96.37% of all statistics are made up
Per the FCA, this address may not be added to any commercial mail list
Nov 13 '05 #375
Sidney Cadot wrote:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char B[100], *p;
sprintf(B, "%p", malloc(20));
sscanf(B, "%p", &p);
Still undefined. %p expects a pointer to pointer to void. &p is a
pointer to pointer to char. An argument can be made that it's okay to
pass char* where void* is expected, but that's not the case for char**
and void**. This one's easily fixed, though.
(Nothing in the standard forbids a buffer overflow, but let's ignore
that for a sec as too theoretical.)
snprintf solves that problem, anyway. You really want something like
the GNU `asprintf' in this case.
Not a particularly good example in favour of using casts.


Not intended as such - that discussion is closed as far as I am
concerned.


Understood. It's still a good example of how casts can hide errors,
though. Without the cast in your first program, gcc gives a warning.
With the cast (and with "int main()" added), the program compiles
without any warnings or errors.
This is just a convoluted example of using malloc() without
assignment, and no memory leak. It's not a great deal more interesting
than the more obvious free(malloc(20) ) though.


If function calls don't count as assignment (as this suggests) then
you can probably construct a more interesting example. The following
isn't tested, but you get the idea. Unfortunately, null pointers
don't just `fall through' the standard library functions, hence the
need for `nmemcpy', `nplus', etc.

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

typedef struct {
void *first;
void *rest;
} pair;

/* as memcpy if `dest' is non-null, otherwise do nothing and return
null */
void *nmemcpy(void *dest, const void *src, size_t n) {
return dest ? memcpy(dest, src, n) : NULL;
}

/* add `n' to `dest' if the latter is non-null, otherwise return
null */
char *nplus(char *dest, ptrdiff_t n) {
return dest ? dest + n : NULL;
}

/* construct a `pair', initializing the `first' and `rest' members
from the parameters. */
pair *makepair(void *first, void *rest) {
return nmemcpy(nplus(n memcpy(malloc(s izeof(pair)),
&first,
sizeof first),
offsetof(pair, rest)),
&rest,
sizeof rest);
}

Jeremy.
Nov 13 '05 #376
Jeremy Yallop wrote:
Sidney Cadot wrote:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char B[100], *p;
sprintf(B, "%p", malloc(20));
sscanf(B, "%p", &p);

Still undefined. %p expects a pointer to pointer to void. &p is a
pointer to pointer to char. An argument can be made that it's okay to
pass char* where void* is expected, but that's not the case for char**
and void**. This one's easily fixed, though.


That was sloppy. You're entirely right.
(Nothing in the standard forbids a buffer overflow, but let's ignore
that for a sec as too theoretical.)


snprintf solves that problem, anyway. You really want something like
the GNU `asprintf' in this case.


There's a lot of cases where I really would want this, but in this case
it would seem to be a bit overkill. Then again, you're right in principle.
Not a particularly good example in favour of using casts.


Not intended as such - that discussion is closed as far as I am
concerned.


Understood. It's still a good example of how casts can hide errors,
though. Without the cast in your first program, gcc gives a warning.
With the cast (and with "int main()" added), the program compiles
without any warnings or errors.


Still, in the correct version of the program you would need the void**
cast to get defined behavior, as you correctly pointed out.

Your point about casts being able to hide errors is of course true.
This is just a convoluted example of using malloc() without
assignment, and no memory leak. It's not a great deal more interesting
than the more obvious free(malloc(20) ) though.

If function calls don't count as assignment (as this suggests) then
you can probably construct a more interesting example. The following
isn't tested, but you get the idea. Unfortunately, null pointers
don't just `fall through' the standard library functions, hence the
need for `nmemcpy', `nplus', etc.

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

typedef struct {
void *first;
void *rest;
} pair;

/* as memcpy if `dest' is non-null, otherwise do nothing and return
null */
void *nmemcpy(void *dest, const void *src, size_t n) {
return dest ? memcpy(dest, src, n) : NULL;
}

/* add `n' to `dest' if the latter is non-null, otherwise return
null */
char *nplus(char *dest, ptrdiff_t n) {
return dest ? dest + n : NULL;
}

/* construct a `pair', initializing the `first' and `rest' members
from the parameters. */
pair *makepair(void *first, void *rest) {
return nmemcpy(nplus(n memcpy(malloc(s izeof(pair)),
&first,
sizeof first),
offsetof(pair, rest)),
&rest,
sizeof rest);
}


Though I find this sympathetically convoluted, this is really cheating a
bit because you shift the responsibility for storing the pointer to the
caller of makepair().

I think a simpler function which shows the same property of 'using
malloc() without assignment AND with recoverable memory usage' exists.
I'm emberrassed to suggest it but

void *f(const int n) { return malloc(n); }

would do this too, cheating in the same way.

Your example is more interesting of course, because it is remotely
useful. And I must say it's impressive that you didn't test this - I
don't see any potential for undefined behavior.

Best regards,

Sidney

Nov 13 '05 #377
Sidney Cadot wrote:
Still, in the correct version of the program you would need the void**
cast to get defined behavior, as you correctly pointed out.


void *p;
sprintf(B, "%p", malloc(20));
sscanf(B, "%p", &p); /* &p has type void **. No cast needed! */

Jeremy.
Nov 13 '05 #378
James Kuyper wrote:
Richard Heathfield <do******@addre ss.co.uk.invali d> wrote in message
news:<bn******* ***@hercules.bt internet.com>.. .

Do you have an example of a cast that is not required for correctness but
which can nevertheless add to the portability of a program?
Assume clock_t is, for a particular implementation, a typedef for
'double'. Then

printf("%g", clock()/CLOCKS_PER_SEC) ;

is correct code for that implementation, but needs to be rewritten as:

printf("%g", (double)clock()/(double)CLOCKS_ PER_SEC);

for portability to other implementations , where clock_t might be, for
instance, an 'int'. Even this more portable form fails in the
techically possible case where clock_t is typedef for an imaginary
type. :-)


Oh, I see. I'm rather disappointed, since I would not regard
clock()/CLOCKS_PER_SEC as "correct code", and it comes as rather a surprise
to hear that C experts think it is. I mean, /yes/, it may be "correct code
for that implementation" , but then so may void main().
I am yet to be persuaded that you need anything other than extern "C" { }
for C++ compatibility.


Examine Annex C of the C++ standard. It's quite possible to write
valid C code that is also valid C++ code, with different meanings.
Using extern "C" is not sufficient to cover those cases.


Perhaps I wasn't quite clear. Firstly, I am well aware that it is possible
to write code that means different things in the two languages. Secondly, I
am referring not to deliberately-constructed "exploits" but to "real world"
code. Thirdly and perhaps most importantly, I am referring specifically to
the construct:

extern "C"
{
#include "c_header.h "
};

where the header contains the usual (or what /ought/ to be usual) mixture of
comments, preprocessor directives, typedefs, and function prototypes.
There's a common misconception that code in an extern "C" block gets
compiled according to the rules of the C language; it does not.
It didn't occur to me for a moment that it does.
An
identifier with external linkage declared as extern "C" is passed to
the linker using C naming conventions. A function or function pointer
whose function type is declared extern "C" uses C interface
conventions. However, the actual code in an extern block gets compiled
using the rules of C++, and can make use of C++ features such as
templates and function overloading (though a function with extern "C"
language linkage cannot itself be part of an overload set).
Yes, but you don't put code in headers. Well, /I/ don't put code in headers.
> and to quiet silly warnings.


Wouldn't some kind of warning-processor do the job better? Why pollute
the code with casts that are not required for any other reason, merely to
silence a verbose compiler?


As a general rule, end users would tend to be annoyed if using a
library required them to send the compiler output through a "warning
processor". They might end up deciding to use a different library,
that doesn't impose such a burden.


In P J Plauger's rather special case, yes, I do see your (and his) point.
But I think my comment still stands in the more general case. I've worked
on a couple of sites that use such "warning processors" to suppress
warnings that they consider to be noise. Classic case:

foo.c:18: warning: missing initializer
foo.c:18: warning: (near initialization for `baz.j')

which is provoked by the somestructtype somestruct = {0} idiom.
I've tried to follow your English explanation, and I can't see anything
terribly difficult or esoteric about what you're doing that would justify
a malloc cast, so presumably I have misunderstood. Could you give us a
concrete C example instead, please? Thanks.


Let me translate his English; it's pretty straight forward.

here.h:
#include "somewhere_else .h"
typedef struct
{
// "... a structure declared here containing a pointer to ..."
their_struct *ptheirs;
// other contents.
} other_struct;


Already this doesn't compile. :-) (C99 comments.) But okay, you have a
struct type with a pointer in it. With you so far...

somewhere_else. h:
// " ... a structure declared somewhere else ..."
typedef struct
{
// contents
} their_struct;
....and now you have a struct type that the other struct type can point at.
Still with you...
there.c:
#include "here.h"
// " ... for which storage is allocated there ..."
void there(ourstruct *ours, size_t N)
{ // ".. we allocate N times the size of the thing we really want,
Here, you've utterly lost me. If you're after N objects, why not just do:
ours->theirs = malloc(N * sizeof *ours->theirs);

And if you're not after N objects, why allocate N times the amount of
storage?
// cast the resultant pointer to a pointer to that type, and store
// it in what should be a compatible type of pointer.
ours->theirs = (their_struct*) malloc(N * sizeof(their_st ruct));
Well, the return value of malloc is bound to be a compatible pointer, isn't
it? I don't see what problem you're solving. Sorry for being dense.
// Other code.
}

some_other_ther e.c:
#include "here.h"
// " ... and freed some other there ..."
void some_other_ther e(ourstruct *ours)
{
// Other code
free(ours->theirs);
}

The one problem that can be caught by the cast of the malloc() return
value is a mis-match between the actual type of "ours->theirs" and the
type used in the type cast.
But if you don't cast in the first place, there /can't/ be a mismatch and
therefore there is no problem. Am I missing something here?

The cost of this technique is that it
merely replaces one opportunity for a silent mis-match with a
different opportunity for an equally disastrous silent mis-match.
However, since the cast and the sizeof are both on the same line, they
are much less likely to get out of sync with each other, than either
of them is to get out of sync with the actual type of "ours->theirs".


I must be very dense today. I simply don't see why:

ours->theirs = malloc(N * sizeof *ours->theirs);

won't turn the trick.

--
Richard Heathfield : bi****@eton.pow ernet.co.uk
"Usenet is a strange place." - Dennis M Ritchie, 29 July 1999.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
K&R answers, C books, etc: http://users.powernet.co.uk/eton
Nov 13 '05 #379
[Attrs fixed]

P.J. Plauger wrote:
"Richard Heathfield" <do******@addre ss.co.uk.invali d> wrote in message
news:bn******** **@hercules.bti nternet.com...
P.J. Plauger wrote:
> The C++ Standard (thanks to me)
<chortle>
(Alas, I missed this wry comment last time around.)
</chortle>
> deliberately
> permits the C library to have either extern "C" or extern "C++" linkage
> -- and we have serious customers for both flavors. Having done so, we
> then found reasons to make *all* of our C source code compilable as
> C++.
Well, this is indeed what you have said before, but I am not clear about
what those reasons actually /are/.


Some of our customers like having all their code in C++, others like it
all in C. We satisfy both with one source product.


Well, fair enough in your case, a standard library, where I suspect that
many customers want the source merely as a security blanket, and wouldn't
know how to change it without breaking stuff - so it doesn't really matter
what the source looks like. But in the more usual case, I would expect C++
code to be written using C++ idioms, and C++ that is written in the common
subset of C and C++ cannot use C++ idioms.
Do you have an example of a cast that is not required for correctness but
which can nevertheless add to the portability of a program?


Others have pointed out the problems with flexible types such as clock_t.


As I have said in reply to that other, the castless version of the code is
not what /I/ would regard as correct.
Similar issues arise with int and char. (I'm stealing time from a WG14
meeting to generate this reply.
Well, please don't feel obliged to do that on my account.
Don't want to take the time to chase down
concrete examples.
Then I remain unpersuaded. Sorry, but there it is.
Besides, I agree with Sidney Cadot that this thread
is/should be running down.)


Well, I have yet to see any concrete evidence that casting malloc can be
beneficial. Obviously, you don't have to provide any if you don't want to.
But see below.
> for C++ compatibility,


I am yet to be persuaded that you need anything other than extern "C" { }
for C++ compatibility.


Got that. We have customers who are persuaded otherwise. We make more
money if we give our customers what they ask for.


Yes, I can see that. Personally, I'd prefer to persuade the customers not to
be so damn silly, and then give them a few swift slaps on the ear; but
perhaps you are one of those strange people who prefers to /keep/ your
customers. :-)

> and to quiet silly warnings.


Wouldn't some kind of warning-processor do the job better? Why pollute
the code with casts that are not required for any other reason, merely to
silence a verbose compiler?


Once again, we have customers who demand that our code generate no
warnings. They don't want to hear that they have to postprocess diagnostic
output.


Understood and accepted.

I've tried to follow your English explanation, and I can't see anything
terribly difficult or esoteric about what you're doing that would justify
a malloc cast, so presumably I have misunderstood. Could you give us a
concrete C example instead, please? Thanks.


Others have given at least partial examples.


....which exemplify - what, precisely? The example I saw showed only that
someone had gone to a lot of trouble to add casts to code that didn't need
them.
Well, I thank you for this explanation, but it doesn't actually explain
anything. For example, could you please give an example of "the kind [of
bugs] exposed by such casts [on malloc]" that are otherwise so expensive?


If my explanations to date don't actually explain anything to you, I
despair of further attempts.


Ah, that's a shame. You see, you have yet to give a concrete example. If I
may summarise, you've basically pointed that you cast malloc because it
leads to more portable code and can help you find bugs. These are the
specific areas in which I think that you could argue your case more
effectively by providing concrete examples. But it seems you are refusing
this opportunity.

Now, if /I/ were to refuse to give a concrete example of an abstract point
after repeated requests, people might just think I didn't know what I was
talking about, and it would be no good my protesting that I "despair" of
giving concrete explanations if I hadn't in fact provided any.

Now, I don't think for a moment that /you/ don't know what you're talking
about, but I /do/ think that you have failed to make your case. If you are
content not to have made your case, that's fine by me, but I will continue
to advise people not to cast malloc, because it seems to me that I have no
/good/ reason to advise them in any other way.

--
Richard Heathfield : bi****@eton.pow ernet.co.uk
"Usenet is a strange place." - Dennis M Ritchie, 29 July 1999.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
K&R answers, C books, etc: http://users.powernet.co.uk/eton
Nov 13 '05 #380

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

Similar topics

3
11266
by: William C. White | last post by:
Does anyone know of a way to use PHP /w Authorize.net AIM without using cURL? Our website is hosted on a shared drive and the webhost company doesn't installed additional software (such as cURL) on the server because of that. Our site will have an SSL certificate next week, so I would like to use AIM instead of SIM, however, I don't know how to send data via POST over https and recieve data from the Authorize.net server over an https...
2
5865
by: Albert Ahtenberg | last post by:
Hello, I don't know if it is only me but I was sure that header("Location:url") redirects the browser instantly to URL, or at least stops the execution of the code. But appearantely it continues to execute the code until the browser send his reply to the header instruction. So an exit(); after each redirection won't hurt at all
3
23053
by: James | last post by:
Hi, I have a form with 2 fields. 'A' 'B' The user completes one of the fields and the form is submitted. On the results page I want to run a query, but this will change subject to which field is completed.
0
8508
by: Ollivier Robert | last post by:
Hello, I'm trying to link PHP with Oracle 9.2.0/OCI8 with gcc 3.2.3 on a Solaris9 system. The link succeeds but everytime I try to run php, I get a SEGV from inside the libcnltsh.so library. 354 roberto@ausone:Build/php-4.3.2> ldd /opt/php4/bin/php libsablot.so.0 => /usr/local/lib/libsablot.so.0 libstdc++.so.5 => /usr/local/lib/libstdc++.so.5 libm.so.1 => /usr/lib/libm.so.1
1
8621
by: Richard Galli | last post by:
I want viewers to compare state laws on a single subject. Imagine a three-column table with a drop-down box on the top. A viewer selects a state from the list, and that state's text fills the column below. The viewer can select states from the drop down lists above the other two columns as well. If the viewer selects only one, only one column fills. If the viewer selects two states, two columns fill. Etc. I could, if appropriate, have...
4
18317
by: Albert Ahtenberg | last post by:
Hello, I have two questions. 1. When the user presses the back button and returns to a form he filled the form is reseted. How do I leave there the values he inserted? 2. When the user comes back to a page where he had a submitted POST data the browser keeps telling that the data has expired and asks if repost. How to avoid that? I tried registering all POST and GET vars as SESSION vars but
1
6890
by: inderjit S Gabrie | last post by:
Hi all Here is the scenerio ...is it possibly to do this... i am getting valid course dates output on to a web which i have designed ....all is okay so far , look at the following web url http://www.mis.gla.ac.uk/biquery/training/ but each of the courses held have maximum of 8 people that could be
2
31461
by: Jack | last post by:
Hi All, What is the PHP equivilent of Oracle bind variables in a SQL statement, e.g. select x from y where z=:parameter Which in asp/jsp would be followed by some statements to bind a value to :parameter I dont like the idea of making the SQL statement on the fly without binding parameters as I dont want a highly polluted SQL cache.
3
23617
by: Sandwick | last post by:
I am trying to change the size of a drawing so they are all 3x3. the script below is what i was trying to use to cut it in half ... I get errors. I can display the normal picture but not the results of the picture half the size. The PHP I have installed support 1.62 or higher. And all I would like to do is take and image and make it fit a 3x3. Any suggestions to where I should read or look would be appreciated.
0
9935
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
11137
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10742
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10844
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10410
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
9571
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
7122
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5797
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
3
3231
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.