473,756 Members | 3,390 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

enum type int or unsigned int?

Hi all,

Can the compiler chose the type of an enum to be signed or unsigned
int? I thought it must be int; looks like it changes based on the
assigned values. Below if I don't initialize FOO_STORE to be, say -10,
I get a warning about unsigned comparison and I'm seeing an infinite
loop.

If I do initialize FOO_STORE = -10, I don't see any warnings. No
infinite loop.

Isn't the type of FOO_xyz required to be an 'int'?
Can the compiler choose its type to be unsigned int?

--------
#include <stdio.h>

typedef enum {
FOO_STORE , /* if = -10 is added, no warnings. works fine */
FOO_HASHTABLE,
FOO_STATE,
FOO_CONFIG,
FOO_MAX
} foo_subobj_type _en;
int main(void) {
foo_subobj_type _en sub_obj;

for (sub_obj = FOO_MAX-1; sub_obj >= FOO_STORE; --sub_obj) {
printf("%d\n", sub_obj);
}
return 0;
}
gcc --version gcc (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-52)
gcc -Wall -W -ansi -pedantic enum.c enum.c: In function `main':
enum.c:15: warning: comparison of unsigned expression >= 0 is always
true


Thanks,
Karthik

Apr 13 '06 #1
10 23607
> foo_subobj_type _en sub_obj;

So the value range of sub_obj is
FOO_STORE ,
FOO_HASHTABLE,
FOO_STATE,
FOO_CONFIG,
FOO_MAX
for (sub_obj = FOO_MAX-1; sub_obj >= FOO_STORE; --sub_obj)

sub_obj will be in the range of FOO_STORE ~ FOO_MAX.

sub_obj >= FOO_STORE always is TRUE. That is why you get the warning.

If you cast enum type into "int", FOO_STORE~FOO_M AX will be treated as
"int".
In this case, you can assign FOO_STORE = integer value, all FOO_*
become CONST INT.

Apr 14 '06 #2
"ka*****@gmail. com" <ka*****@gmail. com> writes:
Hi all,

Can the compiler chose the type of an enum to be signed or unsigned
int? I thought it must be int; looks like it changes based on the
assigned values. Below if I don't initialize FOO_STORE to be, say -10,
I get a warning about unsigned comparison and I'm seeing an infinite
loop.

If I do initialize FOO_STORE = -10, I don't see any warnings. No
infinite loop.

Isn't the type of FOO_xyz required to be an 'int'?
Can the compiler choose its type to be unsigned int?

--------
#include <stdio.h>

typedef enum {
FOO_STORE , /* if = -10 is added, no warnings. works fine */
FOO_HASHTABLE,
FOO_STATE,
FOO_CONFIG,
FOO_MAX
} foo_subobj_type _en;
int main(void) {
foo_subobj_type _en sub_obj;

for (sub_obj = FOO_MAX-1; sub_obj >= FOO_STORE; --sub_obj) {
printf("%d\n", sub_obj);
}
return 0;
}
gcc --version

gcc (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-52)
gcc -Wall -W -ansi -pedantic enum.c

enum.c: In function `main':
enum.c:15: warning: comparison of unsigned expression >= 0 is always
true


This behavior would be allowed in C99... but since you're invoking GCC
in what is supposed to be C89-mode...

My draft copy of C89 says very clearly that enumerated types have a
type compatible with int. An object of that type would necessarily be
signed, unless I'm missing something.

C99 allows the implementation to choose a type that is compatible with
any of char, any signed integer type, or any unsigned integer
type. The constants /themselves/, must have type int.

Looks to me like GCC's broken in this regard.

--
Micah J. Cowan
Programmer, musician, typesetting enthusiast, gamer...
http://micah.cowan.name/
Apr 14 '06 #3
Micah Cowan <mi***@cowan.na me> writes:
[...]
My draft copy of C89 says very clearly that enumerated types have a
type compatible with int. An object of that type would necessarily be
signed, unless I'm missing something.

C99 allows the implementation to choose a type that is compatible with
any of char, any signed integer type, or any unsigned integer
type. The constants /themselves/, must have type int.


Did that change between your C89 draft and the actual standard? (I
wonder if you're confusing the type of the enum literals with the
compatible type of the enum type itself.)

According to my copy of the ISO C90 standard, section 6.5.2.2:

The identitiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.

...

Each enumerated type shall be compatible with an integer type; the
choice of type is implementation-defined.

C99 6.7.2.2 says:

The identifiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.

...

Each enumerated type shall be compatible with char, a signed
integer type, or an unsigned integer type. The choice of type is
implementation-defined, but shall be capable of representing the
values of all the members of the enumeration.

which is nearly the same.

--
Keith Thompson (The_Other_Keit h) 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.
Apr 14 '06 #4
Keith Thompson wrote:
Micah Cowan <mi***@cowan.na me> writes:
[...]
My draft copy of C89 says very clearly that enumerated types have a
type compatible with int. An object of that type would necessarily be
signed, unless I'm missing something.

C99 allows the implementation to choose a type that is compatible with
any of char, any signed integer type, or any unsigned integer
type. The constants /themselves/, must have type int.
Did that change between your C89 draft and the actual standard? (I
wonder if you're confusing the type of the enum literals with the
compatible type of the enum type itself.)

According to my copy of the ISO C90 standard, section 6.5.2.2:

The identitiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.

...

Each enumerated type shall be compatible with an integer type; the
choice of type is implementation-defined.

C99 6.7.2.2 says:

The identifiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.

...

Each enumerated type shall be compatible with char, a signed
integer type, or an unsigned integer type. The choice of type is
implementation-defined, but shall be capable of representing the
values of all the members of the enumeration.


So sub_obj was chosen by the compiler to be an unsigned type when I
don't have a -10 or -1 initializer. But it chose the type to be int
when I did not have any initializer (in which case I didn't see the
warning or an infinite loop).

I could avoid the infinite loop by casting subobj to be int. But I'm
not sure if this is guaranteed to work always.

This seems to work (no infinite loop):

for (sub_obj = FOO_MAX-1; (int) sub_obj >= FOO_STORE; --sub_obj) {

I'm thinking the guaranteed way to avoid the infinite loop is
for (sub_obj = FOO_MAX-1; (int) sub_obj >= (int) FOO_STORE; --sub_obj)
{

In the first case, isn't it still possible the left int is converted to
an unsigned (ie -1 back to the 4 billon plus number on a 32bit system)
and the comparison is made? ie if sizeof(int) == sizeof(unsigned int),
the int is changed to unsigned. May be this rule doesn't apply in case
of explicit int cast?

Karthik
which is nearly the same.

--
Keith Thompson (The_Other_Keit h) 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.


Apr 14 '06 #5
Keith Thompson <ks***@mib.or g> writes:
Micah Cowan <mi***@cowan.na me> writes:
[...]
My draft copy of C89 says very clearly that enumerated types have a
type compatible with int. An object of that type would necessarily be
signed, unless I'm missing something.

C99 allows the implementation to choose a type that is compatible with
any of char, any signed integer type, or any unsigned integer
type. The constants /themselves/, must have type int.
Did that change between your C89 draft and the actual standard? (I
wonder if you're confusing the type of the enum literals with the
compatible type of the enum type itself.)


No; I saw that that distinction had been made in C99, but couldn't
find it in C90.

....For some reason, as I read it now, I /do/ find the text to be
similar to what C99 says. I'm really at a loss to explain how I read
it otherwise... I specifically looked for the text "enumerated type".
Unless I somehow read "integer type" to mean "int"... very weird.

Anyway, reading it again, I find the text to be as you described for
ISO C90...
According to my copy of the ISO C90 standard, section 6.5.2.2:

The identitiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.

...

Each enumerated type shall be compatible with an integer type; the
choice of type is implementation-defined.

C99 6.7.2.2 says:

The identifiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.

...

Each enumerated type shall be compatible with char, a signed
integer type, or an unsigned integer type. The choice of type is
implementation-defined, but shall be capable of representing the
values of all the members of the enumeration.

which is nearly the same.


Right. In fact, isn't it semantically the same? I guess they were
simply making it clearer that you can use unsigned types. The explicit
mention of char seems pretty redundant to me, though, since it's
obviously going to be either a signed or unsigned type.

--
Micah J. Cowan
Programmer, musician, typesetting enthusiast, gamer...
http://micah.cowan.name/
Apr 14 '06 #6
>Keith Thompson wrote:
[snippage]
C99 6.7.2.2 says:

The identifiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.
...
Each enumerated type shall be compatible with char, a signed
integer type, or an unsigned integer type. The choice of type is
implementation-defined, but shall be capable of representing the
values of all the members of the enumeration.

In article <11************ *********@v46g2 000cwv.googlegr oups.com>
ka*****@gmail.c om <ka*****@gmail. com> wrote:So sub_obj was chosen by the compiler to be an unsigned type when I
don't have a -10 or -1 initializer. But it chose the type to be int
when I did not have any initializer ...
(I am not entirely sure what you mean by "have ... initializer(s)" ,
so I will recap.)

In any case, "enum" types are declared via the following syntax:

enum tag { enumerator-constant-list }

where the "tag" is optional and the constant-list gives identifiers
and optional values. While the syntax for an identifier with a
value is, e.g.:

enum x { Y = 42 };

this is not technically an "initialize r": this creates a type named
"enum x" and a constant named Y. The type -- the thing named "enum
x" -- is "compatible with" (i.e., at machine level really happens
to be the same as) some integral type, such as char, or unsigned
long, or whatever. The constant -- the thing named "Y" -- has type
int. C99 adds a requirement that was missing in C90: in C90, one
could write, e.g.:

enum foo { BIG = 32100 };

and yet the compiler might choose "enum foo" to be compatible
with "unsigned char", even though UCHAR_MAX is 255. Then if you
did:

enum foo var = BIG;

this would set "var" to (32100 % 256) or 100. In C99, this cannot
happen; "var" has to be big enough to hold the value 32100.

The C99 rule *does* mean that if you write, e.g.:

enum plusminus { MINUS = -1, ZERO, PLUS };

no C99 compiler can choose an unsigned type for "enum plusminus",
because one of the values it has to hold is -1, which is negative.
MINUS is just a name for -1, ZERO just a name for 0, and PLUS just
a name for 1, however; and all three of these names produce values
of type "int", even if "enum plusminus" is really "signed char" or
"signed short" or something along those lines.

If you leave out the "= value" part, each enumeration constant
(Y, BIG, MINUS, and so on in the examples above) takes on one
more than the previous value, or 0 for the first value. So if
you do something like:

enum e { FOO_STORE, FOO_1, FOO_2, FOO_3, FOO_4, FOO_MAX };

then all the constants are nonnegative and "enum e" can be an
unsigned type.

Proceeding onward, given the above "enum e" and a variable
declared as:

enum e sub_obj;
This seems to work (no infinite loop):
for (sub_obj = FOO_MAX-1; (int) sub_obj >= FOO_STORE; --sub_obj) {
This will generally work but is not guaranteed. Either sub_obj
has some signed integral type, in which the (int) cast is redundant,
or sub_obj has some unsigned integral type.

This second case is where the problem occurs. Suppose sub_obj is
actually "unsigned int" underneath. In this case, out-of-range
positive values almost always become negative values. (Technically
the result is implementation-defined, but in practice it is not a
problem.) But suppose instead sub_obj is actually "unsigned char"
underneath. Then if sub_obj is currently FOO_STORE, --sub_obj
means "set unsigned char sub_obj to (0-1) mod (UCHAR_MAX+1)",
which on most machines will set it to 255. On the next trip
through the loop, the test will compare (int)255 >= 0, which is
of course true, so the loop will continue to run.
I'm thinking the guaranteed way to avoid the infinite loop is
for (sub_obj = FOO_MAX-1; (int) sub_obj >= (int) FOO_STORE; --sub_obj)


This is no different from the first loop. FOO_STORE is an
enumeration constant, not an object with some enumerated type,
and enumeration *constants* have type "int". The extra cast in
the test says "convert this int to int", which of course has
no effect on it.

The absolute guaranteed method is a "test at bottom" style loop,
for which C lacks a convenient construct. If it had one, it might
read:

for_until_test_ at_bottom (sub_obj = FOO_MAX - 1;
sub_obj == FOO_STORE; --sub_obj) {
...
}

which in C, in the general case, has to be written out as:

for (sub_obj = FOO_MAX - 1;; --sub_obj) {
...
label:
if (sub_obj == FOO_STORE)
break;
}

with "continue"s replaced with "goto label" as needed. Or one can
use a do ... while loop:

sub_obj = FOO_MAX - 1;
do {
...
} while (sub_obj-- != FOO_STORE);

which avoids the need for a goto, but (a) separates out the loop
initialization, and (b) requires that the test and "increment" --
decrement, in this case -- at the bottom of the loop be combined.
(In this case, it all works pretty well.)
--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.
Apr 27 '06 #7
On Fri, 14 Apr 2006 19:49:44 GMT, Micah Cowan <mi***@cowan.na me>
wrote:
<snip C90 6.5.2.2 vs C99 6.7.2.2>
Each enumerated type shall be compatible with char, a signed
integer type, or an unsigned integer type. The choice of type is
implementation-defined, but shall be capable of representing the
values of all the members of the enumeration.

which is nearly the same.


Right. In fact, isn't it semantically the same? I guess they were
simply making it clearer that you can use unsigned types. The explicit
mention of char seems pretty redundant to me, though, since it's
obviously going to be either a signed or unsigned type.


Not exactly.

'plain' char must 'act like' (have the same representation, and
behavior) as one of signed char or unsigned char at the
implementation' s option, sometimes selectable by the user, but is
still a distinct type and is not included in either of the classes
'signed integer type' or 'unsigned integer type'.

'integer types' (which was actually spelled 'integral types' in C90)
includes plain char, signed integer types, unsigned integer types, and
enumeration types. Using it in C90 6.5.2.2 is formally recursive: an
enumeration type can be compatible with an enumeration type, which
presumably is compatible with an enumeration type, etc. Obviously to
any sensible person, this was not intended or useful, but the new
wording specifically prevents it.

- David.Thompson1 at worldnet.att.ne t
May 1 '06 #8

Chris Torek wrote:
Keith Thompson wrote: [snippage]
C99 6.7.2.2 says:

The identifiers in an enumerator list are declared as constants
that have type int and may appear wherever such are permitted.
...
Each enumerated type shall be compatible with char, a signed
integer type, or an unsigned integer type. The choice of type is
implementation-defined, but shall be capable of representing the
values of all the members of the enumeration.


In article <11************ *********@v46g2 000cwv.googlegr oups.com>
ka*****@gmail.c om <ka*****@gmail. com> wrote:
So sub_obj was chosen by the compiler to be an unsigned type when I
don't have a -10 or -1 initializer. But it chose the type to be int
when I did not have any initializer ...


(I am not entirely sure what you mean by "have ... initializer(s)" ,
so I will recap.)

In any case, "enum" types are declared via the following syntax:

enum tag { enumerator-constant-list }

where the "tag" is optional and the constant-list gives identifiers
and optional values. While the syntax for an identifier with a
value is, e.g.:

enum x { Y = 42 };

this is not technically an "initialize r": this creates a type named
"enum x" and a constant named Y. The type -- the thing named "enum
x" -- is "compatible with" (i.e., at machine level really happens
to be the same as) some integral type, such as char, or unsigned
long, or whatever. The constant -- the thing named "Y" -- has type
int. C99 adds a requirement that was missing in C90: in C90, one
could write, e.g.:

enum foo { BIG = 32100 };

and yet the compiler might choose "enum foo" to be compatible
with "unsigned char", even though UCHAR_MAX is 255. Then if you
did:

enum foo var = BIG;

this would set "var" to (32100 % 256) or 100. In C99, this cannot
happen; "var" has to be big enough to hold the value 32100.

The C99 rule *does* mean that if you write, e.g.:

enum plusminus { MINUS = -1, ZERO, PLUS };

no C99 compiler can choose an unsigned type for "enum plusminus",
because one of the values it has to hold is -1, which is negative.
MINUS is just a name for -1, ZERO just a name for 0, and PLUS just
a name for 1, however; and all three of these names produce values
of type "int", even if "enum plusminus" is really "signed char" or
"signed short" or something along those lines.

If you leave out the "= value" part, each enumeration constant
(Y, BIG, MINUS, and so on in the examples above) takes on one
more than the previous value, or 0 for the first value. So if
you do something like:

enum e { FOO_STORE, FOO_1, FOO_2, FOO_3, FOO_4, FOO_MAX };

then all the constants are nonnegative and "enum e" can be an
unsigned type.

Proceeding onward, given the above "enum e" and a variable
declared as:

enum e sub_obj;
This seems to work (no infinite loop):
for (sub_obj = FOO_MAX-1; (int) sub_obj >= FOO_STORE; --sub_obj) {


This will generally work but is not guaranteed. Either sub_obj
has some signed integral type, in which the (int) cast is redundant,
or sub_obj has some unsigned integral type.

This second case is where the problem occurs. Suppose sub_obj is
actually "unsigned int" underneath. In this case, out-of-range
positive values almost always become negative values. (Technically
the result is implementation-defined, but in practice it is not a
problem.) But suppose instead sub_obj is actually "unsigned char"
underneath. Then if sub_obj is currently FOO_STORE, --sub_obj
means "set unsigned char sub_obj to (0-1) mod (UCHAR_MAX+1)",
which on most machines will set it to 255. On the next trip
through the loop, the test will compare (int)255 >= 0, which is
of course true, so the loop will continue to run.
I'm thinking the guaranteed way to avoid the infinite loop is
for (sub_obj = FOO_MAX-1; (int) sub_obj >= (int) FOO_STORE; --sub_obj)


This is no different from the first loop. FOO_STORE is an
enumeration constant, not an object with some enumerated type,
and enumeration *constants* have type "int". The extra cast in
the test says "convert this int to int", which of course has
no effect on it.

The absolute guaranteed method is a "test at bottom" style loop,
for which C lacks a convenient construct. If it had one, it might
read:

for_until_test_ at_bottom (sub_obj = FOO_MAX - 1;
sub_obj == FOO_STORE; --sub_obj) {
...
}

which in C, in the general case, has to be written out as:

for (sub_obj = FOO_MAX - 1;; --sub_obj) {
...
label:
if (sub_obj == FOO_STORE)
break;
}

with "continue"s replaced with "goto label" as needed. Or one can
use a do ... while loop:

sub_obj = FOO_MAX - 1;
do {
...
} while (sub_obj-- != FOO_STORE);

which avoids the need for a goto, but (a) separates out the loop
initialization, and (b) requires that the test and "increment" --
decrement, in this case -- at the bottom of the loop be combined.
(In this case, it all works pretty well.)


Thanks Chris for the explanation. I did feel the double (int) cast
looked a bit awkward. But again there are some vary valid uses for
casts. I think in my system, gcc chose unsigned int (instead of
unsigned char) and hence I didn't see the infinite loop. I better
change this code to one of the way's you've suggested.

I think I can do the plain 0 to FOO_MAX-1 for some cases (that is no
need for the "reverse" iteration on the enum's). BTW if I go from 0 to
FOO_MAX, I still run into the risk of infinite loop?

for (sub_obj = FOO_STORE; sub_obj <= FOO_MAX; ++sub_obj)

Note: I added a <= (not <). If FOO_MAX=255 and compiler chose unsigned
char for sub_obj, I run into the risk of infinite loop.

Thanks,
Karthik

--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.


May 2 '06 #9
Chris Torek wrote:
.... snip ...
The absolute guaranteed method is a "test at bottom" style loop,
for which C lacks a convenient construct. If it had one, it might
read:

for_until_test_ at_bottom (sub_obj = FOO_MAX - 1;
sub_obj == FOO_STORE; --sub_obj) {
...
}


I strongly disagree. That is the purpose of the do loop:

do {
/* whatever */
} while (appropriate);

--
"If you want to post a followup via groups.google.c om, 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
More details at: <http://cfaj.freeshell. org/google/>
Also see <http://www.safalra.com/special/googlegroupsrep ly/>
May 2 '06 #10

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

Similar topics

5
1706
by: Kaila | last post by:
I'm using metroworks codewarrior and can't solve a redeclariotin of type problem I have several classes and each of them need to have a custom type called enum X now what I was thinking is to put the type in a seperate file and simply attach it as a librabry to my main as follows: In main.cpp
2
4292
by: Voronkov Konstantin | last post by:
Thank you for answer, but I still did not got *how* to make serialization of enum type. Can you provide more instructions or hint, please? My task is to serialize enum to something like byte array, and then load enum from that byte array to the same enum type on other platform. One way to do I see is:
3
2698
by: Jerry | last post by:
Hi, I found an enum type, for example: enum Alignment { Top, Bottom } is derived Enum, but Enum is a struct. However,
2
1819
by: tzvika.visman | last post by:
I write a MC++ wrapper for our company internal SDK that wrote in C++ native code for writing application with this SDK over C# and other .NET languages and most of my SDK API function return a status code that define as a enum type. Do I have other option then duplicate the enum from the c++ to the C# code and write a MC++ class that look something like this: public __gc class ManagedDokStatus {
13
12392
by: Don | last post by:
How do I get an Enum's type using only the Enum name? e.g. Dim enumType as System.Type Dim enumName as String = "MyEnum" enumType = ???(enumName)
2
1870
by: Alex Feldman | last post by:
Which of the following is better? Defining an enum type inside a class as a nested type, or in the the namespace? An example of nested type enumerated type would be: public Class Product Public Enum Status psNormal psCharged End Enum
7
9837
by: Harris | last post by:
Dear all, I have the following codes: ====== public enum Enum_Value { Value0 = 0, Value1 = 10,
2
2484
by: NullQwerty | last post by:
Hey folks, So, I've got three enum types: enum enum1 enum enum2 enum enum3 And then I've got a function overloaded three times to accept each enum type: private void func(enum1 myenum){}
10
3788
by: yu_kuo | last post by:
I got series warning when using write enum type to a ostream using operator<<, like in call to `std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) ' A.cpp:60: warning: passing `NAME_ENUM' chooses `int' over `long int' Compiler gcc 3.4.3 When deserialize from an istream, I have to first using an int, and
0
9869
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...
0
9708
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
8709
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...
1
7242
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 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 a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6534
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
5140
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...
0
5302
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3805
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
3
2665
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.