0x09 | 2 years ago | on: Why is int in C in practice at least a 32 bit?
0x09's comments
0x09 | 2 years ago | on: C’s Biggest Mistake (2009)
I wonder if typeof in c23 has changed this at all. Previously there was no sense in defining an anonymous struct as a function's return type. You could do it, but those structs would not be compatible with anything. With typeof maybe that's no longer the case.
e.g. with clang 16 and gcc 13 at least this compiles with no warning and g() returns 3. But I'm not sure if this is intended by the standard or just happens to work.
struct { int a; int b; } f() {
return (typeof(f())){1,2};
}
int g() {
typeof(f()) x = f();
return x.a + x.b;
}
edit: though I suppose this just pushes the problem onto callers, since every function that does this now has a distinct return type that can only be referenced using typeof(yourfn).0x09 | 3 years ago | on: sqlean: A set of SQLite extensions
Did you have any questions in particular?
0x09 | 3 years ago | on: GitHub-Next
0x09 | 5 years ago | on: The ideology hiding in SimCity’s black box
The site contained a pretty amazingly comprehensive detailing of the game's mechanics and various algorithms scattered throughout the articles, to the point where it seemed to me like it'd be possible to implement a lot of the game's engine using it.
Some good examples of the more detailed articles:
The economy https://community.simtropolis.com/omnibus/other-games/the-ec...
Land value specifics https://community.simtropolis.com/omnibus/other-games/land-v...
Traffic and transportation specifics https://community.simtropolis.com/omnibus/other-games/traffi...
Zone development rules https://community.simtropolis.com/omnibus/other-games/zone-d...
0x09 | 5 years ago | on: Pointers Are Complicated, Or: What's in a Byte? (2018)
0x09 | 5 years ago | on: Pointers Are Complicated, Or: What's in a Byte? (2018)
void *x = malloc(...);
free(x);
if(x); // undefined behavior
Note that this isn't about dereferencing x after free, which is understandably not valid. Rather the standard specifies that any use of the pointer's value itself is undefined after being used as an argument to free, even though syntactically free could not have altered that.This special behavior is also specifically applied to FILE* pointers after fclose() has been called on them.
If there is some historical reason / architecture that could explain this part of the specification I would be interested to hear the rationale, this has been present in mostly the same wording since C89.
0x09 | 5 years ago | on: GCC 10.1 Released
clang --analyze --analyzer-output text ...
Will print the entire analysis tree in the same format as regular diagnostics.0x09 | 5 years ago | on: Tell HN: C Experts Panel – Ask us anything about C
0x09 | 6 years ago | on: Lambdas for C – sort of
There was an analysis of this and the C++11 lambda specification done shortly after at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1483.htm, but it was inconclusive and there doesn't seem to have been any followup since then.
0x09 | 7 years ago | on: A little-known C feature: Static array indices in parameter declarations (2013)
void f(char (*n)[255]);
char array[6];
f(&array);
warns of "incompatible pointer types passing 'char (* )[6]' to parameter of type 'char (* )[255]'"This won't produce a diagnostic for f(NULL) like "static" does, but does have two properties that might be considered benefits:
1) The length is exact rather than a minimum.
2) The type of "* n" is still char[255], whereas a char[static 255] parameter is still a decayed pointer-to-char. Thus with the former sizeof(* n) behaves as expected inside of "f", yielding 255.
These are true of the array-in-struct method as well.
0x09 | 7 years ago | on: C2x: the next real revision of the C standard
Since this as a whole is among the least consistently implemented and (arguably based on the number of questions it generates) least well understood aspects of the standard it's nice to see some authoritative efforts to clarify the intended behaviors.
0x09 | 7 years ago | on: The End of Video Coding?
0x09 | 8 years ago | on: A Tutorial on Portable Makefiles
0x09 | 8 years ago | on: A Tutorial on Portable Makefiles
- Supply multiple makefiles targeting different implementations
- Bring in autotools in all its glory (at this point you are depending on an external GNU package anyway)
- Or explicitly target GNU Make, which is the default make on Linux and macOS, is very commonly used on *BSD, and is almost certainly portable to every platform your software is going to be tested and run on. The downside being that BSD users need a heads up before typing "make" to build your software. But speaking as a former FreeBSD user, this is pretty easy to figure out after your first time seeing the flood of syntax errors.
0x09 | 8 years ago | on: Flang – A Fortran compiler targeting LLVM
The name re-use was a bit confusing.
0x09 | 8 years ago | on: strncpy() is not a safer strcpy() (2012)
0x09 | 9 years ago | on: Apple releases a bit of code to let you put Live Photos on your sites
This was true of gif until the mid 2000s, well after it became popular.
0x09 | 9 years ago | on: Historian: Because Please Stop Deleting My Bash History
So this does not do anything to manage different sessions clobbering each others' histories. The solution posted by zootboy will work together with this script however.
0x09 | 9 years ago | on: FBI Used Best Buy's Geek Squad to Increase Secret Public Surveillance
You might consider the int_fastN_t types a sort of spiritual successor to this with fewer downsides since they purposefully guarantee a minimum width.