473,385 Members | 1,483 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,385 software developers and data experts.

typedef /struct and the scope problems

lets say I have a header file :

struct AAAA
{
blabla.....
};
typedef struct AAAA A;
typedef struct BBB
{
blabla...
.....
} B;
I try to compile it and get an error message that "AAA" has already
been declared in the current scope ! ( And I checked everywhere it is
not ! )
What's funny is , that when I remove the second typedef it compiles
well.
Any ideas why such a weird behavior ?
Thanks ?

Mar 3 '06 #1
23 5759
On 2006-03-03, my**********@gmail.com <my**********@gmail.com> wrote:
lets say I have a header file :

struct AAAA
{
blabla.....
};
typedef struct AAAA A;
typedef struct BBB
{
blabla...
.....
} B;
I try to compile it and get an error message that "AAA" has already
been declared in the current scope ! ( And I checked everywhere it is
not ! )
What's funny is , that when I remove the second typedef it compiles
well.
Any ideas why such a weird behavior ?
Thanks ?


No idea. What compiler are you using, it may be broken
Mar 3 '06 #2
"my**********@gmail.com" <my**********@gmail.com> writes:
lets say I have a header file :

struct AAAA
{
blabla.....
};
typedef struct AAAA A;
typedef struct BBB
{
blabla...
.....
} B;
I try to compile it and get an error message that "AAA" has already
been declared in the current scope ! ( And I checked everywhere it is
not ! )
What's funny is , that when I remove the second typedef it compiles
well.
Any ideas why such a weird behavior ?


That's odd, I get a parse error on "blabla.....".

If I fix the syntax errors, it compiles without error. Obviously the
error is in code you haven't bothered to show us (probably on line
42).

If you post a complete compilable source file that exhibits the
problem, we can probably help. If not, we're not mindreaders.

--
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.
Mar 3 '06 #3
Intel's one.

Mar 3 '06 #4
struct float
{
int e;
int m;
};

typedef struct float A;

typedef struct BBB
{
A floatA;
} B;

Mar 3 '06 #5
"my**********@gmail.com" <my**********@gmail.com> writes:
Intel's one.


Intel's one what?

Please read <http://cfaj.freeshell.org/google/> (that URL has been
posted here hundreds of times).

--
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.
Mar 3 '06 #6
"my**********@gmail.com" <my**********@gmail.com> writes:
struct float
{
int e;
int m;
};

typedef struct float A;

typedef struct BBB
{
A floatA;
} B;


Without context (see <http://cfaj.freeshell.org/google/>), it's
difficult to know what you're asking about this code.

But the fact that "float" is a reserved word is going to cause some
problems. You didn't mention any syntax errors in your original post.
Is this *really* the exact code that you compiled? If not, please
post the exact code (copy-and-paste it, *don't* re-type it) and
provide enough context so we can figure out why you're showing it to
us.

--
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.
Mar 3 '06 #7
ok _float instead of float :) , names aside ....
struct _float
{
int e;
int m;
};

typedef struct _float A;

typedef struct BBB
{
A floatA;
} B;


removing
typedef struct _float A;

and using :
struct _float floatA
will compile .... still why this typedef line creates problems.

Mar 4 '06 #8
my**********@gmail.com wrote:
ok _float instead of float :) , names aside ....
struct _float
{
int e;
int m;
};

typedef struct _float A;

typedef struct BBB
{
A floatA;
} B;


removing
typedef struct _float A;

and using :
struct _float floatA
will compile .... still why this typedef line creates problems.


There is no problem. It compiles fine here.
If you want further help, I suggest you post the /actual/
code. Then you post the actual command line used to compile it,
and the output/errors that produces.
Mar 4 '06 #9
"my**********@gmail.com" wrote:

ok _float instead of float :) , names aside ....
struct _float
{
int e;
int m;
};

typedef struct _float A;

typedef struct BBB
{
A floatA;
} B;


removing
typedef struct _float A;

and using :
struct _float floatA
will compile .... still why this typedef line creates problems.


Don't alter material you quote. Do preserve attribution lines for
any quoted material. Do snip anything not germane to your reply.

_float is an identifier reserved for the implementation. You
should not use it. In general, do not use any identifiers that
begin with a '_' (although that is slight overkill).

--
"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
More details at: <http://cfaj.freeshell.org/google/>
Also see <http://www.safalra.com/special/googlegroupsreply/>

Mar 4 '06 #10
On 2006-03-04, CBFalconer <cb********@yahoo.com> wrote:
"my**********@gmail.com" wrote:

ok _float instead of float :) , names aside ....
> > struct _float
> > {
> > int e;
> > int m;
> > };
> >
> > typedef struct _float A;
> >
> > typedef struct BBB
> > {
> > A floatA;
> > } B;


removing
typedef struct _float A;

and using :
struct _float floatA
will compile .... still why this typedef line creates problems.


Don't alter material you quote. Do preserve attribution lines for
any quoted material. Do snip anything not germane to your reply.

_float is an identifier reserved for the implementation. You
should not use it. In general, do not use any identifiers that
begin with a '_' (although that is slight overkill).


For completeness,

You may use an identifier that begins with _ and a lowercase letter, or
_ and a digit, or the identifier _, in the following situations: As a
struct member. As a static or automatic identifier with block scope. The
following possibility may or may not require that no standard headers
are included: As a static identifier with file scope or a macro. The
following possibility definitely requires that no standard headers are
included: As an identifier in the tag namespace (i.e. name of a struct,
enum, or union)

You may never use an identifier that begins with _ and an uppercase
letter or a second _.

[Anyone, did I miss anything or are any of these incorrect?]
Mar 4 '06 #11
Jordan Abel <ra*******@gmail.com> writes:
For completeness,

You may use an identifier that begins with _ and a lowercase letter, or
_ and a digit, or the identifier _, in the following situations: As a
struct member. As a static or automatic identifier with block scope. The
following possibility may or may not require that no standard headers
are included: As a static identifier with file scope or a macro.
This last is never a possibility.
The
following possibility definitely requires that no standard headers are
included: As an identifier in the tag namespace (i.e. name of a struct,
enum, or union)
No. You may never do this, headers included or no. They are reserved
without qualification.
You may never use an identifier that begins with _ and an uppercase
letter or a second _.


Right.
Mar 4 '06 #12
Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-04, CBFalconer <cb********@yahoo.com> wrote: [snip] For completeness,

You may use an identifier that begins with _ and a lowercase letter, or
_ and a digit, or the identifier _, in the following situations: As a
struct member. As a static or automatic identifier with block scope. The
following possibility may or may not require that no standard headers
are included: As a static identifier with file scope or a macro. The
following possibility definitely requires that no standard headers are
included: As an identifier in the tag namespace (i.e. name of a struct,
enum, or union)

You may never use an identifier that begins with _ and an uppercase
letter or a second _.

[Anyone, did I miss anything or are any of these incorrect?]


I honestly don't know. I've read the rules about which identifiers
are reserved for which purposes, but since it's so trivially easy to
avoid any and all identifiers starting with '_', I don't bother to
remember them.

--
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.
Mar 4 '06 #13
Jordan Abel wrote:
On 2006-03-04, CBFalconer <cb********@yahoo.com> wrote:
"my**********@gmail.com" wrote:
ok _float instead of float :) , names aside ....
>struct _float
>{
> int e;
> int m;
>};
>
>typedef struct _float A;
>
>typedef struct BBB
>{
> A floatA;
>} B;

removing
typedef struct _float A;

and using :
struct _float floatA
will compile .... still why this typedef line creates problems.


Don't alter material you quote. Do preserve attribution lines for
any quoted material. Do snip anything not germane to your reply.

_float is an identifier reserved for the implementation. You
should not use it. In general, do not use any identifiers that
begin with a '_' (although that is slight overkill).

For completeness,

You may use an identifier that begins with _ and a lowercase letter, or
_ and a digit, or the identifier _, in the following situations: As a
struct member. As a static or automatic identifier with block scope. The
following possibility may or may not require that no standard headers
are included: As a static identifier with file scope or a macro. The
following possibility definitely requires that no standard headers are
included: As an identifier in the tag namespace (i.e. name of a struct,
enum, or union)

You may never use an identifier that begins with _ and an uppercase
letter or a second _.

[Anyone, did I miss anything or are any of these incorrect?]


My advice is "Don't do it!". There is never a need for an application
program to name anything with a leading underscore. Never.

--
Joe Wright
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
Mar 4 '06 #14
Keith Thompson <ks***@mib.org> writes:
Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-04, CBFalconer <cb********@yahoo.com> wrote:

[snip]
For completeness,

You may use an identifier that begins with _ and a lowercase letter, or
_ and a digit, or the identifier _, in the following situations: As a
struct member. As a static or automatic identifier with block scope. The
following possibility may or may not require that no standard headers
are included: As a static identifier with file scope or a macro. The
following possibility definitely requires that no standard headers are
included: As an identifier in the tag namespace (i.e. name of a struct,
enum, or union)

You may never use an identifier that begins with _ and an uppercase
letter or a second _.

[Anyone, did I miss anything or are any of these incorrect?]


I honestly don't know. I've read the rules about which identifiers
are reserved for which purposes, but since it's so trivially easy to
avoid any and all identifiers starting with '_', I don't bother to
remember them.


To be clear, I don't mean to imply that discussing the detailed rules
is inappropriate, just that depending on them is unwise.

--
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.
Mar 4 '06 #15
Keith Thompson wrote:
Keith Thompson <ks***@mib.org> writes:
Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-04, CBFalconer <cb********@yahoo.com> wrote:

[snip]
For completeness,

You may use an identifier that begins with _ and a lowercase letter,
or _ and a digit, or the identifier _, in the following situations:
As a struct member. As a static or automatic identifier with block
scope. The following possibility may or may not require that no
standard headers
are included: As a static identifier with file scope or a macro.
The following possibility definitely requires that no standard
headers are included: As an identifier in the tag namespace (i.e.
name of a struct, enum, or union)

You may never use an identifier that begins with _ and an uppercase
letter or a second _.

[Anyone, did I miss anything or are any of these incorrect?]

I've recently read the Standard on this, and think this is the extent of
it (as far as _ goes).
I honestly don't know. I've read the rules about which identifiers
are reserved for which purposes, but since it's so trivially easy to
avoid any and all identifiers starting with '_', I don't bother to
remember them.


I agree with this approach as well. I use it myself. I consider meddling
there is just for the people who like to live dangerously... ;-)

--
BR, Vladimir

There was a young fellow from Cal.,
In bed with a passionate gal.
He leapt from the bed,
To the toilet he sped;
Said the gal, "What about me, old pal?"

Mar 4 '06 #16
On 2006-03-04, Vladimir S. Oka <no****@btopenworld.com> wrote:
Keith Thompson wrote:
Keith Thompson <ks***@mib.org> writes:
Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-04, CBFalconer <cb********@yahoo.com> wrote:
[snip]
For completeness,

You may use an identifier that begins with _ and a lowercase letter,
or _ and a digit, or the identifier _, in the following situations:
As a struct member. As a static or automatic identifier with block
scope. The following possibility may or may not require that no
standard headers
are included: As a static identifier with file scope or a macro.
The following possibility definitely requires that no standard
headers are included: As an identifier in the tag namespace (i.e.
name of a struct, enum, or union)

You may never use an identifier that begins with _ and an uppercase
letter or a second _.

[Anyone, did I miss anything or are any of these incorrect?]
I've recently read the Standard on this, and think this is the extent of
it (as far as _ goes).
I honestly don't know. I've read the rules about which identifiers
are reserved for which purposes, but since it's so trivially easy to
avoid any and all identifiers starting with '_', I don't bother to
remember them.


I agree with this approach as well. I use it myself. I consider meddling
there is just for the people who like to live dangerously... ;-)


It can be useful on struct members as a "suggestion" to users of an API
that the member is "private". Other than that, I agree.
Mar 4 '06 #17
Jordan Abel wrote:
On 2006-03-04, Vladimir S. Oka <no****@btopenworld.com> wrote:
Keith Thompson wrote:
Keith Thompson <ks***@mib.org> writes:
Jordan Abel <ra*******@gmail.com> writes:
> On 2006-03-04, CBFalconer <cb********@yahoo.com> wrote:
[snip]
> For completeness,
>
> You may use an identifier that begins with _ and a lowercase
> letter, or _ and a digit, or the identifier _, in the following
> situations: As a struct member. As a static or automatic
> identifier with block scope. The following possibility may or may
> not require that no standard headers
> are included: As a static identifier with file scope or a macro.
> The following possibility definitely requires that no standard
> headers are included: As an identifier in the tag namespace (i.e.
> name of a struct, enum, or union)
>
> You may never use an identifier that begins with _ and an
> uppercase letter or a second _.
>
> [Anyone, did I miss anything or are any of these incorrect?]


I've recently read the Standard on this, and think this is the extent
of it (as far as _ goes).
I honestly don't know. I've read the rules about which identifiers
are reserved for which purposes, but since it's so trivially easy
to avoid any and all identifiers starting with '_', I don't bother
to remember them.


I agree with this approach as well. I use it myself. I consider
meddling there is just for the people who like to live dangerously...
;-)


It can be useful on struct members as a "suggestion" to users of an
API that the member is "private". Other than that, I agree.


Yes, that can be one safe way of using it. I still tend not to do it, as
it breeds bad habits. One might slip one day... ;-)

--
BR, Vladimir

Today is what happened to yesterday.

Mar 5 '06 #18
It was such a stupid mistake !
I was loading the header file twice :)
simple

#ifndef MY_HEADER
#define MY_HEADER

solved it ...

Thank you guys for all your help !

Mar 7 '06 #19

In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:

[re starting identifiers with an underscore]
It can be useful on struct members as a "suggestion" to users of an API
that the member is "private".


Surely a more effective suggestion is to have the API pass pointers
to an incomplete struct type, and not let the users see its contents
at all.

C provides a mechanism for data abstraction - incomplete structure
types. Why not use it?

(And this has benefits beyond hiding data structure implementation
details; for example, it forces users of the API to call a factory
function to allocate the structure, since they can't declare objects
of that type, nor use sizeof on it. And that, in turn, lets the
implementation track its objects, enforce an RAII-like pattern of
use, and so on.)

--
Michael Wojcik mi************@microfocus.com

Some seem to live on credit as naturally as they breathe, and I remember
the surprise of one of these: "What! You don't owe anybody anything! Good
Lord! man, lend me half a sovereign." -- Arthur Ransome
Mar 9 '06 #20
On 2006-03-09, Michael Wojcik <mw*****@newsguy.com> wrote:

In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:

[re starting identifiers with an underscore]
It can be useful on struct members as a "suggestion" to users of an API
that the member is "private".
Surely a more effective suggestion is to have the API pass pointers
to an incomplete struct type, and not let the users see its contents
at all.


Not if you also want public members. Or even allow for macros to access
bits of the struct

C provides a mechanism for data abstraction - incomplete structure
types. Why not use it?

(And this has benefits beyond hiding data structure implementation
details; for example, it forces users of the API to call a factory
function to allocate the structure, since they can't declare objects
of that type, nor use sizeof on it. And that, in turn, lets the
implementation track its objects, enforce an RAII-like pattern of
use, and so on.)

Mar 9 '06 #21

[Sorry for the late reply; I have been out of the office.]

In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-09, Michael Wojcik <mw*****@newsguy.com> wrote:
In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:

[re starting identifiers with an underscore]
It can be useful on struct members as a "suggestion" to users of an API
that the member is "private".
Surely a more effective suggestion is to have the API pass pointers
to an incomplete struct type, and not let the users see its contents
at all.


Not if you also want public members.


Obviously, but that's another advantage of my suggestion: it avoids
mixing public and private data in the same type, which is a Bad Idea.

If you really can justify a mix of public and private data in one type,
make it a struct of public members and a pointer to an incomplete
struct containing the private ones. There, that wasn't so hard, was
it?
Or even allow for macros to access bits of the struct


Premature optimization, generally. Unless an accessor call is in a
time-critical section of code, this trades robustness (from opacity
and abstraction) and ease of maintenance (because the calling code
needn't change) for a dubious - sometimes nonexistent, thanks to
caching effects - performance gain.

OO programmers are finally coming around to the understanding that
public members are bad for software maintenance. It'd be nice
(though unrealistic) to think that most experienced C programmers had
already figured that out.

--
Michael Wojcik mi************@microfocus.com

Advertising Copy in a Second Language Dept.:
Tapestry of the encounting and the farewell, the birth and the death.
You can hear the human being's song running through the 100 years.
-- Squaresoft
Mar 17 '06 #22
On 2006-03-17, Michael Wojcik <mw*****@newsguy.com> wrote:

[Sorry for the late reply; I have been out of the office.]

In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-09, Michael Wojcik <mw*****@newsguy.com> wrote:
> In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:
>>
>> [re starting identifiers with an underscore]
>> It can be useful on struct members as a "suggestion" to users of an API
>> that the member is "private".
>
> Surely a more effective suggestion is to have the API pass pointers
> to an incomplete struct type, and not let the users see its contents
> at all.


Not if you also want public members.


Obviously, but that's another advantage of my suggestion: it avoids
mixing public and private data in the same type, which is a Bad Idea.

If you really can justify a mix of public and private data in one type,
make it a struct of public members and a pointer to an incomplete
struct containing the private ones. There, that wasn't so hard, was
it?
Or even allow for macros to access bits of the struct


Premature optimization, generally.


Not all optimization is premature, and the point in time at which the
optimization takes place does not change the possible techniques
involved.

In a typical C library, there are plenty of macros that access members
of FILE.
Mar 17 '06 #23

In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-17, Michael Wojcik <mw*****@newsguy.com> wrote:
In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:
On 2006-03-09, Michael Wojcik <mw*****@newsguy.com> wrote:
> In article <sl***********************@random.yi.org>, Jordan Abel <ra*******@gmail.com> writes:
>>
>> [re starting identifiers with an underscore]
>> It can be useful on struct members as a "suggestion" to users of an API
>> that the member is "private".
>
> Surely a more effective suggestion is to have the API pass pointers
> to an incomplete struct type, and not let the users see its contents
> at all.

Not if you also want public members.
Or even allow for macros to access bits of the struct
Premature optimization, generally.


Not all optimization is premature,


Gee, if only I had qualified my "premature optimization" claim...
oh, I did.
and the point in time at which the
optimization takes place does not change the possible techniques
involved.
Fine. Make that "pointless optimization, generally".
In a typical C library, there are plenty of macros that access members
of FILE.


Yes, and so what? No doubt that's a tremendous boon to the tiny
proportion of programs which use stdio macros to perform actions on
FILE objects within a time-critical section of code, for some
unguessable reason, and which are mysteriously not I/O-bound as a
result.

For all other programs, making those macros function calls and
keeping FILE opaque would be fine; indeed, it would be better, since
it would discourage the foolish from poking about in stdio.h and
manipulating the contents of FILE structures directly.

So, as I said: *generally* not a useful optimization.

--
Michael Wojcik mi************@microfocus.com

The lecturer was detailing a proof on the blackboard. He started to say,
"From the above it is obvious that ...". Then he stepped back and thought
deeply for a while. Then he left the room. We waited. Five minutes
later he returned smiling and said, "Yes, it is obvious", and continued
to outline the proof. -- John O'Gorman
Mar 20 '06 #24

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

Similar topics

7
by: Tony Johansson | last post by:
Hello Experts! I have the following Array template class see below. I execute these three statements statement 1: Array<int> x(5); statement 2: cin >>x; statement 3: Array<int>::element_type ...
21
by: Roshan Naik | last post by:
typedef int foo ( foo ); // foo is a pointer-to-function type that takes another foo as argument and returns an int I need to achieve the above effect somehow. This is not accepted by any...
8
by: J Krugman | last post by:
My compiler complains if I do something like this typedef struct { node *next; } node; but it's OK with typedef struct superfluous_identifier { superfluous_identifier *next;
2
by: Immo Birnbaum | last post by:
Hi, I'm trying to solve a programming lab assignment for my college C programming course, but as they taught us two semesters of Java before teaching us any C, I'm having problems with all the...
16
by: burn | last post by:
Hello, i am writing a program under linux in c and compile my code with make and gcc. Now i have 4 files: init.c/h and packets.c/h. Each header-file contains some: init.h: struct xyz {
7
by: Dennis Myrén | last post by:
Hi. Is there any way to define an alias for a type like you could in C++: typedef int NUMBER; I tried using #define but that did not work. Thank you. -- Regards,
8
by: Ronny Mandal | last post by:
Consider these two: Typedef struct { int foo, bar } FooBar; struct FooBar { int foo, bar }; What woul be the only difference here; just that I can create new instances by 'Foobar fb, *pfb',...
15
by: Ian Bush | last post by:
Hi All, I'm a bit confused by the following which is causing one of our user's codes fail in compilation: typedef struct SctpDest_S; 1) Is this standard ? 2) If so ( or even if not so ! )...
17
by: Steve Carter | last post by:
Can someone please explain why the following is not possible? typedef foobar { int x; foobar *next; /* why can't we do this? */ }; Thanks
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...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
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...
0
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...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
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...

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.