A S.O.L.I.D elveket alapvetően objektumorientált paradigmát támogató nyelvekre találták ki, de ezek közül a Single Responsibility az a témakör, ami alkalmazható egy függvény kontextusában is.
Viszont ha C-hez kell nyúlnunk egy magasabb szintű nyelv helyett, akkor valószínűleg erre azért van szükségünk, mert azt szeretnénk, hogy a kódunk a lehető leggyorsabban fusson. Valószínűleg ezért nem írtuk meg valami magasabb szintű nyelven.
A gyorsaság és a kód olvashatósága gyakran egymás ellentettjei. Mivel egy függvények százára bontott kódrészlet sokszor lassabban fog futni, mint egy-egy nagyobb függvény, ami nem feltétlen tartja be a Single Responsibility elvet.
Ennek oka abban keresendő, hogy bár kegyesen megfelejtkezünk róla a legtöbb esetben, de minden függvényhívásnak van költsége. Egyes architektúrák esetén ez a költség elhanyagolható, míg mások esetén kevésbé. Nem véletlen van annyi függvényhívási módszer.
Persze mondhatnánk, hogy ez manapság nem kellene, hogy probléma legyen, hiszen a mai fordítók már okosak, de ez nem mindig volt így és sajna fordító és fordító között is van különbség, mégpedig nem is kevés, főleg ha az x86/x64/ARM szentháromságot elhagyni kényszerülünk valami oknál fogva.
Ebből adódóan, ha mások által készített könyvtárak forráskódját megnézzük, akkor nem biztos, hogy mindig a legszebb kóddal fogunk találkozni és nem feltétlen azért, mert aki írta, nem tud programozni, hanem azért, mert a kód így tud a leghatékonyabban működni.
Természetesen bejátszik a „legacy” faktor is, mivel a legtöbb C kódot nem mostanában írták. Találkozhatunk olyan kóddal is, ami bőven a S.O.L.I.D és a modern fejlesztési elveket megelőzi, de nem kellett hozzányúlni majdnem 20 éve. Ezek a kódok valószínűleg csúnyák a ma bevett szokások szerint, de 20 évig működött és komoly gond nem volt vele, akkor minek piszkáljuk?
Véleményem szerint a „legacy” kód nem attól „legacy”, hogy a „cégnél dolgozó korábbi programozók nem értettek semmihez”, hanem attól, hogy túl sok pénzt hoz, de nem eleget, hogy újraírjuk a nulláról. Természetesen ezen definíció nem zárja ki az előzőt, de ha működik, akkor csak értettek valamihez.
Szóval, ha C kódban találkozunk valami egzotikummal (Pl. 2000 soros inline assembly blokk), akkor ne úgy álljunk a kódhoz, hogy direkt ki akart szúrni mindenkivel, hanem úgy, hogy amikor a kódot írta, ez volt a legjobb megoldás a problémára.