Ne, v C můžu použít "cokoliv" vyjma 0 a NULL. (případně si definovat makro)
Nemůžeš definovat ani makro, ani enum. A to je ten chyták. V C nejde definovat plnohodnotná hodnota TRUE. To tvoje makro bude použitelný maximálně jako předdefinovaná návratová hodnota pro tvoje funkce, nic víc. A stejně se pak nemůžeš spolehnout, že bool f() bude vracet jenom TRUE a FALSE.
Protože by chtěl, aby byla nekonečná? O.o Mimo to zrovna pokud jde o to "testování", tak to kompilátor "zoptimalizuje", tudíž je úplně jedno jestli píšu while(1), nebo for(;; ).
Kompilátoru to jedno je, ale není to jedno těm, kdo ten kód čtou.
for(;

- nekonečný cyklus
for(i = 1; i < 10; i++) - cyklus od jedné do deseti s krokem 1
for( i= 1; i < 100; i+= 5) - cyklus od 1 do 100 s krokem 5
for(i = 0; i < sizeof(x) / sizeof(x[0]); i++) - cyklus procházející statické pole
for(item = root; item != NULL; item = item->next) - cyklus procházející seznam
while(x) - opakování, dokud x != 0
while(1) - opakování, dokud 1 != 0
while(true) - opakování, dokud true != 0 - oh wait, co je to true?
To jsi předpokládal ty. Jinak samozřejmě do-while to řeší.
Tak předpoklad je, že pokud to jde ukončit jinak, než zabitím natvrdo přes kernel, bude tam nějaký příjem zpráv nebo kontrola dat. A z toho se vyhodnotí, kdy končit. A příjem zpráv je přece vždycky součást hlavní smyčky / smyčky ve vlákně. Je fajn, pokud není chyba v parametrech, napřed přijmout zprávy a prubnout jednu iteraci / inicializaci. Nebo inicializovat stavový automat, který má stav EXIT. Situace se může dost lišit a napsat, že while(něco) je univerzální řešení, je na kopanec do zadku zepředu.