This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| acc [2017/07/09 11:00] – korshun | acc [2017/07/14 19:23] (current) – korshun | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | {{tag> | ||
| ====== ACC ====== | ====== ACC ====== | ||
| ACC is the official ACS compiler. | ACC is the official ACS compiler. | ||
| Alternative ACS compilers: [[BCC]], [[GDCC]]. | Alternative ACS compilers: [[BCC]], [[GDCC]]. | ||
| + | |||
| + | * **GitHub**: https:// | ||
| ===== Known bugs ===== | ===== Known bugs ===== | ||
| + | |||
| + | ==== 256 function limit ==== | ||
| + | |||
| + | ACSUtils has a lot more than 256 functions, but official releases of ACC can't compile programs with more than 256 functions. | ||
| + | |||
| + | To fix this, download the April 26, 2017 development version of ACC (unofficial build for Windows): http:// | ||
| ==== Mixing strings and numbers in an array corrupts the numbers ==== | ==== Mixing strings and numbers in an array corrupts the numbers ==== | ||
| < | < | ||
| - | int SomeArray = { | + | int SomeArray[] = { |
| 1, | 1, | ||
| 3.14159, | 3.14159, | ||
| Line 19: | Line 28: | ||
| ACC incorrectly writes initial array values, resulting in some numbers getting interpreted as string indices and recalculated to avoid string index conflicts between libraries. | ACC incorrectly writes initial array values, resulting in some numbers getting interpreted as string indices and recalculated to avoid string index conflicts between libraries. | ||
| + | |||
| + | This bug only affects non-local arrays and happens randomly, usually only with large arrays. | ||
| + | |||
| + | To avoid this bug, **do not use static initialization with non-local arrays, this includes multidimensional arrays**, instead, declare an empty array and initialize it in a function: | ||
| + | |||
| + | < | ||
| + | int SomeArray[3]; | ||
| + | |||
| + | function void InitArrays() | ||
| + | { | ||
| + | int i = 0; | ||
| + | SomeArray[i++] = 1; | ||
| + | SomeArray[i++] = 3.14159; | ||
| + | SomeArray[i++] = " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Or, in a more beautiful way: | ||
| + | |||
| + | < | ||
| + | int SomeArray[3]; | ||
| + | int SomeArrayCount = 0; | ||
| + | |||
| + | function void AddEntry(int x) | ||
| + | { | ||
| + | SomeArray[SomeArrayCount++] = x; | ||
| + | } | ||
| + | |||
| + | function void InitArray(void) | ||
| + | { | ||
| + | AddEntry(1); | ||
| + | AddEntry(3.14159); | ||
| + | AddEntry(" | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Strange compiler crash (ACC 1.56 beta Windows build only) ==== | ||
| + | |||
| + | < | ||
| + | #include " | ||
| + | |||
| + | function int f(void) | ||
| + | { | ||
| + | while (0) | ||
| + | continue; | ||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | function int g(void) | ||
| + | { | ||
| + | while (0) | ||
| + | continue; | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | This code causes the compiler to enter an infinite loop. Any of the following fixes the issue: | ||
| + | |||
| + | * Removing one of the functions | ||
| + | * Removing '' | ||
| + | * Replacing '' | ||
| + | |||
| + | But the following does not: | ||
| + | * Changing the loop condition | ||
| + | * Replacing '' | ||
| + | * Adding more code before and after continue, both inside and outside the loop | ||
| + | * Adding more functions anywhere else | ||
| + | * Replacing " | ||
| + | |||
| + | ==== Local variable names can conflict with global names ==== | ||
| + | |||
| + | < | ||
| + | #define SOMENAME1 1 | ||
| + | int somename2 = 2; | ||
| + | function void somename3(void) {} | ||
| + | |||
| + | function f(int somename1) // ERROR | ||
| + | { | ||
| + | int somename2; // ERROR | ||
| + | int somename3; // ERROR | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Local variables can't have the same names as any global names (function, constant, variable names). Unlike other compilers, local variable names don't shadow the global names, but trigger a compiler error. | ||
| + | |||
| + | ==== No " | ||
| + | |||
| + | There is no type called '' | ||