Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »

Welcome to Software Development on Codidact!

Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.

Activity for Lundin‭

Type On... Excerpt Status Date
Comment Post #291342 Hi there. As per the current scope of this site https://software.codidact.com/help/on-topic, embedded systems questions are off-topic and should be asked on https://electrical.codidact.com/ instead. But before posting there, your question should ideally be self-contained, as in don't link an entire G...
(more)
1 day ago
Edit Post #291342 Question closed 1 day ago
Comment Post #291310 Some would probably disagree and saying that "pointers are dangerous". However, if the programmer can't even write correct code for iterating over a linear sequence of data, then what correct code _can_ they write... It way easier to write than to implement some manner of iteration template monstrosi...
(more)
8 days ago
Comment Post #291310 The language design mistake from there was to enforce this unison iterator interface to all classes, even those that do not benefit from it what-so-ever. That's poor OO design of the language itself - proper OO would distinct from containers which are "linear" and those who aren't. There's no reason ...
(more)
9 days ago
Comment Post #291310 "However, while writing this code, I couldn't help but notice that I am essentially writing a wrapper around pointer arithmetic." Indeed. When writing C++, one often comes to the conclusion "WTF am I even doing, this is nothing but bloated meta programming". In many cases, an `iterator` is nothing b...
(more)
9 days ago
Edit Post #291249 Post edited:
22 days ago
Edit Post #291249 Initial revision 22 days ago
Answer A: Can I access an array element from a pointer to an object contiguous with but outside the array?
The problem with undefined behavior due to array out of bounds happens whenever we use pointer arithmetic, which is only defined to work within the bounds of an array. Where plain variables, "scalars", are defined to behave just the same as arrays of 1 item, as far as pointer arithmetic is concerned....
(more)
22 days ago
Comment Post #291199 @#78383 The header is the exposed part to the caller so you could write documentation there regarding how to tweak them. The caller shouldn't mess with the .c file. Optionally you could have the memory pool itself take these as input parameters to an init function. But most often we want the size to ...
(more)
23 days ago
Comment Post #281518 @#80520 Then you might agree with the posted answer... "memcpy is always preferred when you know the size in advance. It's always faster than strcpy. It is safe and portable."
(more)
24 days ago
Comment Post #291199 @#80468 Start with the OO design. What use-cases are there and what makes sense to turn into classes? Is "door" a central thing to your application, to the point where it needs an abstraction layer. Or do you rather benefit of having abstraction layers on a much lower level, just above the ADC or GPI...
(more)
24 days ago
Edit Post #291199 Post edited:
29 days ago
Comment Post #291195 I know that I'm the one who lead you here, but just a note for the future that embedded systems programming questions normally goes to https://electrical.codidact.com/. But your question is all about software design and without much in the way of embedded systems aspects (save for how to allocate obj...
(more)
29 days ago
Edit Post #291199 Initial revision 29 days ago
Answer A: Pattern / architecture for interfacing with components in C
Code review part: Design (important!) - Global variables/external linkage are to be avoided (Why is global evil?). - You don't actually have private encapsulation in this code since the internals of the struct are exposed to the caller. There are better ways to design this with "opaque types" an...
(more)
29 days ago
Edit Post #291195 Post edited:
30 days ago
Edit Post #291196 Post edited:
30 days ago
Edit Post #291196 Post edited:
30 days ago
Edit Post #291196 Initial revision 30 days ago
Answer A: Why is global evil?
The basics of good vs bad program design All programs are divided in classes. (Or modules/abstract data types/interfaces etc - a rose by any other name.) Each class should only be concerned with its own designated task and not with unrelated parts of the program. Similarly, each class is aut...
(more)
30 days ago
Comment Post #291175 Indeed. I could answer this from a general programming perspective, but not from a PHP-specific perspective. Mostly it is about program design no matter language. But different languages have different scope rules and namespace rules, meaning that it may be more or less serious namespace pollution in...
(more)
about 1 month ago
Comment Post #291112 @#64656 The whole point is that program design-wise input sanitation should happen at the point where input is taken. And if that part is done correctly, strcpy is safer than strncpy. And memccpy is arguably a bit safer too since it has no misleading `str` prefix.
(more)
about 1 month ago
Edit Post #281519 Post edited:
Added note about memccpy
about 1 month ago
Comment Post #291112 I hope you don't mind that I now posted a complementary answer. The fight against `strncpy` is kind of a pet peeve of mine, see :)
(more)
about 1 month ago
Edit Post #291119 Initial revision about 1 month ago
Answer A: How can I manage multiple consecutive strings in a buffer (and add more later)?
When looking at this, we might pretty soon note that storing strings in the same buffer by using null terminators as separator is quite clunky. It blocks us from using handy functions like `strtok`, `bsearch` or `qsort`. And there's no obvious way to tell where all of it ends. To know where it ends, ...
(more)
about 1 month ago
Comment Post #291112 strncpy should pretty much never be used since it was never intended to be a function used on null terminated C strings. See [Is strcpy dangerous and what should be used instead?](https://software.codidact.com/posts/281518). In this case you added the null terminator manually, but people tend to forg...
(more)
about 1 month ago
Edit Post #291074 Initial revision about 1 month ago
Answer A: Is software system design on topic here?
Software design in itself has always been on-topic, as per https://software.codidact.com/help/on-topic. As for system design for a given purpose, I think it is fine within reason. Contrary to popular belief, a certain degree of domain expertise or at least insight is always necessary when writing...
(more)
about 1 month ago
Edit Post #290882 Post edited:
2 months ago
Edit Post #290882 Post edited:
Typo
2 months ago
Comment Post #290885 I don't use this feature, so I'll refrain from posting an answer. But there's a panel to the right "subscribe by email" where you can sign up and then supposedly it gets added to a list below your account -> Preferences -> Manage Email Subscriptions. Seems a bit crude though, I'm not sure if you can ...
(more)
2 months ago
Comment Post #290878 @#78383 Everything that's related to the actual trie implementation should sit alone in one .h/.c pair, without unrelated stuff like test cases and main(). You could also consider some manner of source code prefix for the public API functions, like for example having every function start with `trie_`...
(more)
2 months ago
Edit Post #290882 Post edited:
2 months ago
Edit Post #290882 Initial revision 2 months ago
Answer A: Are there technical reasons to pick one struct coding style over the other?
Arguments in favour of "struct tag style": - Less namespace clutter. C has a peculiar name space system where all identifiers belong to one of: labels, tags, members, ordinary. Struct tag style only occupies a name in the tag name space. Meaning that struct tags will not collide with e...
(more)
2 months ago
Edit Post #290881 Initial revision 2 months ago
Question Are there technical reasons to pick one struct coding style over the other?
C offers two different styles when it comes to structs (and union/enum too). Either declare them using a struct tag only ("struct tag style"): struct mytype { ... }; struct mytype x; Or by using a `typedef`, where the tag is optional ("typedef style"): typedef struct opt...
(more)
2 months ago
Edit Post #290878 Initial revision 2 months ago
Answer A: Trie Implementation, Graph Visualization and Auto-Completion in C
General/program design: - I would have expected a public header file with the API for the whole thing, rather than having some main() test case calling `static` functions from the same file. Sure, this program is small, but having everything in a single file makes things less maintainable. - A ...
(more)
2 months ago
Comment Post #290316 @#53937 `stdin` is not necessarily a macro. C17 7.21.1: "`stdin` ... "which are expressions of type ‘‘pointer to FILE’’". You can't `#undef` expressions.
(more)
4 months ago
Comment Post #290488 Otherwise, I'm not opposed of having this migrated to Power Users if it fits better there.
(more)
4 months ago
Comment Post #290488 @#36396 Oh don't get me started on two factor authentication... it might just be the dumbest invention of this millennium. Chances of some mysterious hacker taking an interest in my little account at some site: non-existent. Chances of me misplacing/breaking/changing my phone: very high. I've alr...
(more)
4 months ago
Comment Post #290488 @#64277 I don't really see how anyone without software security knowledge would be able to answer this. It takes a programmer simply to understand the number of combinations enabled in the symbol table.
(more)
4 months ago
Edit Post #290488 Initial revision 4 months ago
Question Are "strong passwords" at all meaningful?
Whenever registering to diverse sites on the net, you are often forced to enter a so called "strong password", which would ideally contain both upper case letters, lower case letters, digits, and some other character like punctuation. As hard to remember as possible. What I don't understand from a...
(more)
4 months ago
Comment Post #290316 On the other hand I don't understand the C rationale to make these macros either. If the intention was to allow evil things like `#ifdef stdin #undef stdin #endif #define stdin something_else` then it wouldn't be wise to use `stdin` as the name for the internal variable.
(more)
5 months ago
Comment Post #290316 As per your last code example, it would be fine for the library to name the variable `extern FILE *stdin;` and then do `#define stdin stdin`. This would still enable stuff like `#ifdef stdin` - it doesn't "flip off" any original intent. Why they didn't do that in the unknown standard lib mentioned, I...
(more)
5 months ago
Comment Post #290314 This requires digging into the specific library implementation - you don't mention which one - in search of a rationale or naming conventions. Without knowing that, the question cannot be answered. Though open source code bases in general tend to be quite irrationally written and do not necessarily f...
(more)
5 months ago
Comment Post #290215 @#53937 That's correct. The syntax for calling a function-like macro contains commas in itself so we can't pass comma operator arguments without surrounding the argument with parenthesis. The formal syntax is _identifier-list:_ which can either be _identifier_ or _identifier-list_ `,` _identifier_.
(more)
6 months ago