Он, получается, ругается на ветки в которые не должен заходить.
Побороть это никак нельзя?
#define INT_OR_0(A) _Generic((A), int: (A), default: 0)
#define CHARP_OR_NULL(A) _Generic((A), char *:(A), default: NULL)
#define FFF_B(A, BC) \
_Generic((A), \
int : _Generic((BC), \
int : fnk(A, INT_OR_0(BC), NULL), \
char * : fnk(A, 0, CHARP_OR_NULL(BC))))
Может есть опции компилятора/препроцессора?
меньше/больше/равно не считаются за однозначные ответы?
я так понимаю это отдельный вопрос: в чём разница между char *var = "Word" и char var[] = "Word"?
char *var = "Word"
-- нельзя менять, потому что указатель указывает на строковый литерал. char var[] = "Word"
-- можно менять, потому что это массив на стеке или в области данных.
есть разница в такой записи:
int main(int argc, char **argv) и int main(int argc, char[][]) и .. *argv[]) ?
int main(int argc, char[][])
так написать нельзя. Между двумя другими вариантами разницы нет. *str и str[] это разные вещи?
Я ведь в функцию отправляю указатель всё равно.
В каком файле стандартной библиотеки
Мне нужно каким-то образом получать fs::directory_entry с конца в начало.
в key записывается вся переменная вида "имя=значение", а не просто сам ключ
p = strchr(env[i], '=');
должно быть p = strchr(res[i].key, '=');
. Поправил код.
Сергей Горностаев, ...чтобы написать собственный компилятор. Может быть. Для того чтобы ковыряться в чужом компиляторе эта книга почти бесполезна. (Но прочитать её всё равно стоит, для общего культурного развития).