Przykładem printk
wezwanie:Dlaczego funkcja printk() nie używa przecinka do rozdzielania parametrów?
printk(KERN_INFO "Log message.\n");
Być może to pytanie jest więcej o C w ogóle, bo nigdy nie widziałem wcześniej funkcję w C, która oddzielała parametrów bez przecinka.
Jak to działa? Co robi kompilator z tymi informacjami? Ponieważ poziom dziennika jest liczbą całkowitą, a komunikat jest wskaźnikiem do tablicy char, musi on przekazywać je osobno.
kompilator obsługiwane ciągach w konkatenacji. Spójrz na definicję 'KERN_INFO'. Nie robię jądra, ale założę się, że jest to literał łańcuchowy '# define' – WhozCraig
@WhozCraig: Łańcuchowe dosłowne ciągi nie są obsługiwane tylko przez kompilator. Jest zdefiniowany przez język i istnieje od 1989. –
Zauważ, że wiele argumentów * jest * oddzielonych przecinkami: 'printfk (KERN_INFO" n =% d \ n ", n);'. Łańcuch formatu 'KERN_INFO" n =% d \ n "' jest pierwszym argumentem, a 'n' jest drugim. –