Most VSTs are written in C++ rather than pure C to be compatible with VST wrappers, and also because a bit of class management simplifies some parts of the coding.
There's no particular advantage to using pure C.
The basics - oscillators, filters, envelopes, and such - are all solved problems, although you'll need to get up to speed on basic DSP concepts like aliasing, IIR vs FIR filter designs, and such.
More sophisticated filter types use numerical approximation to solve the filter equations. That gets a little more complicated.
And of course you can look at the source code of Csound and Supercollider.
> The basics - oscillators, filters, envelopes, and such - are all solved problems,
When you say this, are there any good reference materials (i.e., books or papers) of the algorithms?
I kind-of abandoned the project before I could figure out what went wrong when rewriting it to keep track of the phase. I understand what needs to be done, I just have a stupid bug somewhere down there and it kinda demotivated me.
I don't like C++ (and have mixed feelings about Rust) because of how large and complex the entire language is. If you'd like a stopgap where you can still enjoy the functional style, and don't mind compromising on raw performance, Python is great. The operator syntax is also quite close to C, and you do get bindings to GStreamer in case you decide to take your audio project in new directions.