Register | Login | |||||
Main
| Memberlist
| Active users
| ACS
| Commons
| Calendar
| Online users Ranks | FAQ | Color Chart | Photo album | IRC Chat |
| |
0 user currently in Programming. | 3 guests |
Acmlm's Board - I2 Archive - Programming - Thinking of getting serious with C. | | | |
Pages: 1 2 3 | Add to favorites | "RSS" Feed | Next newer thread | Next older thread |
User | Post | ||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2885/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
Originally posted by Disch Well by default the button is named something like IDC_BUTTON1, and that worked fine. But if I rename it to something like Button1 and try to use that, it says the variable isn't defined. I have to use the number 1000 (which Button1 is defined as) instead. |
|||
Parasyte Bullet Bill Level: 35 Posts: 179/514 EXP: 267348 For next: 12588 Since: 05-25-04 Since last post: 104 days Last activity: 32 days |
| ||
Eh, you have to use "IDC_BUTTON1" if the button is defined as "IDC_BUTTON1" If you don't like that name, you can give it another one (rename it within the dialog editor properties window!) like "IDC_CLOSE". It's common to have defines (preprocessor defines, remember #define ?) written in all uppercase letters. Remember that C is case-sensitive. In no way does "Button1" equal "IDC_BUTTON1" |
|||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2898/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
I did rename it in the dialog editor, and it updated resource.h but it doesn't seem to want to re-read the file. [edit] Also, regarding memory management; how can I define a variable-sized array? For example, say I wanted to make a program to read files that could be anywhere up to 4MB. If the file is only 32K, it wouldn't make much sense to have 4MB allocated for it. Is there some way to dynamically allocate memory blocks of a variable size? (edited by HyperHacker on 01-11-05 12:46 PM) |
|||
Dish Spiny Level: 38 Posts: 230/596 EXP: 355646 For next: 14801 Since: 03-15-04 From: Disch Since last post: 18 days Last activity: 18 days |
| ||
As for your first problem... only thing I can think of, is resource.h isn't being saved before you compile. As for your memory allocation question: The C way is usually done with malloc() and free() functions. You #include <malloc.h>, and create your array with malloc like so: int* myarray; myarray = (int*)malloc( howmany * sizeof(int) ); 'howmany' would be however many ints you want to make memory for. If there isn't enough memory, malloc will return NULL, so you might want to check for that. Be sure to clean up whe you're done... or you'll have memory leaks in the program. You un-allocate the blocks with free(): free( myarray ); The C++ way is pretty much the same... but instead you use new[] and delete[]: int* myarray; myarray = new int[ howmany ]; delete[] myarray; (afaik, doesn't require any #includes, which I find to be strange, actually) Never mix malloc with delete.... or new with free. If you allocate something with malloc, use free. If you allocate something with new... use delete. The only real difference between the two is that new[] will call an object's Constructor (if it has one), and delete[] will call the object's destructor (if it has one) -- making it more useful for C++ classes and stuff like that. Whereas malloc/free will not call any constructors/destructors. |
|||
sloat Level: 16 Posts: 31/85 EXP: 18044 For next: 2212 Since: 05-21-04 From: South Central Delaware Since last post: 19 days Last activity: 5 hours |
| ||
Originally posted by HyperHacker You could check the size of the file before allocating the memory for reading. There's basically no such thing as a variable sized array in C; nothing that you could compare to VB anyway. You can get around this by allocating, copying, and deleting the old mem, or if you're using the Windows memory functions, there is a HeapResize function which will do that for you. I'm willing to bet that the ReDim command in VB just copies old memory, which would explain why it's so slow. In this case, a better approach may be to use VirtualAlloc and the related functions. This function lets you reserve pages in memory and use them (or not) later. Another option would be to use memory mapped files. You probably won't want to use them for this, but memory mapped files are really good if you need to read portions of a huge file. (edited by sloat on 01-11-05 03:39 PM) |
|||
Parasyte Bullet Bill Level: 35 Posts: 180/514 EXP: 267348 For next: 12588 Since: 05-25-04 Since last post: 104 days Last activity: 32 days |
| ||
Have you tried the "Rebuild All" option after making changes to the resource names? Also try "Clean" and then "Build". | |||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2934/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
Cool, hitting Clean did it. Now what does "fatal error C1010: unexpected end of file while looking for precompiled header directive" mean? This comes up in a source code file which I've included from another source code file (also tried including it in the header file). The only solution I've yet heard is to copy all the #includes into that file, but that just raised a whole lot of errors (and for good reason too, that doesn't even make sense ). |
|||
Parasyte Bullet Bill Level: 35 Posts: 193/514 EXP: 267348 For next: 12588 Since: 05-25-04 Since last post: 104 days Last activity: 32 days |
| ||
Precompiled header directives... Those are the *.pch files that the compiler makes. I have no idea why the silly compiler requires these things. Personally, I would suggest using a better compiler. MinGW + make files + batch files for compiling and cleaning always did the trick for me. As for IDEs. I've grown to love TextPad. If you hate such setups, I can't say I blame you. It does take a while to ween yourself off of Microsoft's nipple. |
|||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2954/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
I'll look into that. Does it come with a resource builder? If not, what should I use for that? Also does it optimize big switch statements into jump tables? I was hoping to write an emulator (big project I know, but I already wrote the essentials in VB, it's just too slow) and I'd like it to be as fast as possible. (Even though it's only emulating a 4Mhz Z80. ) | |||
Parasyte Bullet Bill Level: 35 Posts: 205/514 EXP: 267348 For next: 12588 Since: 05-25-04 Since last post: 104 days Last activity: 32 days |
| ||
There are many, many, many resource editors available that can be used with MinGW. MinGW does not come bundled with a resource editor, but it does include a resource compiler. (windres.exe) A free resource editor can be downloaded with the LCC-Win32 package - http://www.cs.virginia.edu/~lcc-win32/ There are also at LEAST 11 levels of optimization you can use with MinGW. Perhaps even more. The optimatation levels range from speed-oriented (-O0 to -O9 for slower to faster executables) to size-oriented (-Os to create the smallest file the compiler can manage). Each optimization level will optimize certain portions of code (such as switch statements) in many different ways. You may notice that speed-optimized executables tend to be a bit larger than non optimized builds. That's usually due to unrolling loops and inlining functions to reduce overhead. Anything you write in C will be fast. VERY fast, compared to Visual Basic. But just how fast it will be depends on how it's written. There are a lot of interesting tricks you can use to write fast code. So you should keep that in mind, and not rely on the compiler to do all the work for you. (edited by Parasyte on 01-17-05 05:53 PM) |
|||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2957/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
How exaclty do I work this? I compiled it with 'gcc -c' like the doc says, and it didn't output anything except a .o file in \bin, even though the source file was in a completely different folder. | |||
Dish Spiny Level: 38 Posts: 233/596 EXP: 355646 For next: 14801 Since: 03-15-04 From: Disch Since last post: 18 days Last activity: 18 days |
| ||
.o files are object files. You still need to run the linker to make an executable. .cpp --> [compiler] --> .o --> [linker] --> .exe |
|||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2958/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
Oh yeah, I see how that works now. Read the wrong thing. | |||
Parasyte Bullet Bill Level: 35 Posts: 207/514 EXP: 267348 For next: 12588 Since: 05-25-04 Since last post: 104 days Last activity: 32 days |
| ||
gcc -o file.exe -c file.c | |||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2971/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
I've been using gcc -o file.exe file.c, seems to be doing the job. The only problem I've encountered so far is with the statement 'BOOL StopEmulation = false;' - it raises an error that false is undefined outside a function. If I don't give it a default assignment, it works, but then I don't know what the value will be. And yay for being able to have a console window with a Win32 program. Sure beats MessageBox() for debug output. [edit] Pooh, I just have to capitalize it. Where's that resource editor anyway? Do I have to download that entire program? Also what's this 'C99 mode'? I get the error "'for' loop initial declaration used outside C99 mode" when I try to do a for loop with the variable defined in it, like "for(int i=0;i<48;i++)". (This works if i is defined outside the loop, though.) (edited by HyperHacker on 01-18-05 07:25 PM) (edited by HyperHacker on 01-18-05 07:43 PM) |
|||
Parasyte Bullet Bill Level: 35 Posts: 209/514 EXP: 267348 For next: 12588 Since: 05-25-04 Since last post: 104 days Last activity: 32 days |
| ||
C99 is a C 'standard' that warns you about doing stupid crap that C++ supports. Just like declaring variables within functions. It's bad code. When you think about it, declaring variables within a loop seems like it would be re-declaring on each iteration, right? (That's not what actually happens, but it should be viewed in that manner.) Same goes for declaring within a for loop. The for loop is set up so it goes (assign; test; action) If you try to break the rules with something even as simple as (declare, assign; test; action) the compiler will obviously complain. If you really want to write such nonsense code, though, you can switch to the C++ compiler. Which is generally g++. (edited by Parasyte on 01-18-05 09:37 PM) (edited by Parasyte on 01-18-05 09:38 PM) |
|||
neotransotaku Baby Mario 戻れたら、 誰も気が付く Level: 87 Posts: 1946/4016 EXP: 6220548 For next: 172226 Since: 03-15-04 From: Outside of Time/Space Since last post: 11 hours Last activity: 1 hour |
| ||
well if you didn't know, your false outside the function error is because false is a C++ keyword, not a C keyword. However, one of the C headers #define BOOL, TRUE, and FALSE so you can use it. | |||
Dish Spiny Level: 38 Posts: 234/596 EXP: 355646 For next: 14801 Since: 03-15-04 From: Disch Since last post: 18 days Last activity: 18 days |
| ||
'true', 'false', 'TRUE', and 'FALSE' are like the stupidest keywords ever. Why the hell are 0 and 1 so inconvienient to type? =P I mean really... they're easier to type.. .and it's not like they're confusing. |
|||
HyperLamer <||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people Sesshomaru Tamaranian Level: 118 Posts: 2972/8210 EXP: 18171887 For next: 211027 Since: 03-15-04 From: Canada, w00t! LOL FAD Since last post: 2 hours Last activity: 2 hours |
| ||
Well, you write how you want then. The only part I don't like about it is that they have to be capitalized, but a quick '#define true TRUE' and '#define false FALSE' fixes that. I'm having a bit of a problem with pointers, though. This function in particular: void Inc16(BYTE reg1, BYTE reg2) { printf("Inc16(%X, %X) -> ",reg1,reg2); reg2++; if(reg2 == 0) { reg1++; } printf("%X, %X\n",reg1,reg2); } What I'm trying to do is pass it two variables, and have it modify the variables themselves. If I call it like "Inc16(regB, regC);" where regB = 0x13 and regC = 0x37, the function does indeed show that it's incremented reg2, but regC is still 0x37. I also tried using pointers, the best I could manage was to increment the pointer itself. [edit] Bleh, no tabs. Also I know that if doesn't need braces but I'm gonna have to add to it later. (edited by HyperHacker on 01-19-05 11:25 AM) |
|||
Parasyte Bullet Bill Level: 35 Posts: 210/514 EXP: 267348 For next: 12588 Since: 05-25-04 Since last post: 104 days Last activity: 32 days |
| ||
void Inc16(BYTE *reg1, BYTE *reg2) { (*reg2)++; if((*reg2) == 0) { (*reg1)++; } } //... BYTE val1 = 8, val2 = 120; printf("Inc16(0x%02X, 0x%02X) -> ",val1,val2); Inc16(&val1,&val2); printf("0x%02X, 0x%02X\n",val1,val2); //... Learning how to use pointers properly is rather important. Read what I said once again, about dereferencing pointers in C. |
Pages: 1 2 3 | Add to favorites | "RSS" Feed | Next newer thread | Next older thread |
Acmlm's Board - I2 Archive - Programming - Thinking of getting serious with C. | | | |