Какое название переменной в коде на С используется наиболее часто?
Если вы думаете, что i, то вы угадали. Думаю, это было не сложно.
Но как насчет топ5, топ10 названий переменных?
Для примера рассмотрим код Linux, взятый отсюда: github.com/mirrors/linux.
Итак, попробуйте предположить какие названия встречаются почти также часто как i. Готовы?
Итак, вот наиболее встречаемые имена переменных:
Много угадали?
Второй шанс — все переменные, встречаемость которых больше 500:
Сюда попало уже больше знакомых названий, нашлось место даже для j.

Давайте копнем глубже и поищем информацию по наиболее интересным или непонятным переменным.
Вторая по встречаемости переменная. Используется чаще всего как возвращаемое значение, например:
Как понятно из названия, хранит флаги. Обычно типа long или int.
Сокращение от return code, хранит код результата вызова функции, который затем возвращается.
Сокращение от Interrupt Request, явная специфика ядра Linux, врядли в другом проекте такое название было бы 10 по встречаемости.
Тоже нечто специфичное для ядра, видимо сокращение от Register. Используется в основном во всяких низкоуровневых драйверах.
Переменная для тех, кому жалко букв на название, потому что в неё что только не складывают. В одних местах она заменяет i, в других является массивом символов, в третьих является сокращением от Page.
В топ попало довольно много названий, обозначающих по сути одно и то же:
В благодарность дочитавшим или пролиставшим до этого места подарок: список переменных, в названии которых содержится magic.
Для подсчета статистики использовался несложный код на C#, собирающий все файлы *.c и ищущий в них строки по следующему регулярному выражению:
Предположительно он должен находить все объявления переменных примитивных типов, различные структуры я не учитывал. Корректность этого выражения подтверждена только усидчивой ручной проверкой и исправлением, но свою задачу он выполняет.
Если вы думаете, что i, то вы угадали. Думаю, это было не сложно.
Но как насчет топ5, топ10 названий переменных?
Для примера рассмотрим код Linux, взятый отсюда: github.com/mirrors/linux.
Итак, попробуйте предположить какие названия встречаются почти также часто как i. Готовы?
Топ 10 названий
Итак, вот наиболее встречаемые имена переменных:
- i 26618
- ret 25533
- flags 15754
- err 13319
- buf 9328
- len 8410
- count 7644
- size 6145
- rc 5771
- irq 5212
Много угадали?
Второй шанс — все переменные, встречаемость которых больше 500:
- i 26618
- ret 25533
- flags 15754
- err 13319
- buf 9328
- len 8410
- count 7644
- size 6145
- rc 5771
- irq 5212
- val 4696
- status 4575
- data 3844
- name 3803
- addr 3185
- offset 3165
- error 3116
- reg 2951
- cpu 2884
- cmd 2712
- retval 2624
- index 2387
- result 2331
- type 2267
- r 2209
- value 2127
- n 2104
- idx 2013
- arg 1854
- p 1651
- mask 1614
- timeout 1561
- id 1455
- start 1438
- port 1433
- res 1378
- mode 1365
- length 1334
- nr 1184
- tmp 1166
- enable 1156
- page 1151
- str 1140
- c 1129
- end 1098
- state 1021
- event 1018
- s 949
- num 918
- base 904
- level 875
- buffer 851
- channel 845
- x 773
- address 767
- extra 758
- pos 752
- j 748
- fd 743
- dev 742
- ch 737
- rate 735
- cnt 707
- ptr 699
- slot 669
- on 633
- fmt 622
- bit 547
- off 529
Сюда попало уже больше знакомых названий, нашлось место даже для j.

Интересности
Давайте копнем глубже и поищем информацию по наиболее интересным или непонятным переменным.
ret
Вторая по встречаемости переменная. Используется чаще всего как возвращаемое значение, например:
int ret = cft->trigger(cgrp, (unsigned int)cft->private);
return ret ? ret : nbytes;
flags
Как понятно из названия, хранит флаги. Обычно типа long или int.
int n = ACC_MODE(flags);
if (flags & (O_TRUNC | O_CREAT))
n |= AUDIT_PERM_WRITE;
rc
Сокращение от return code, хранит код результата вызова функции, который затем возвращается.
int rc;
rc = audit_do_config_change("audit_enabled", &audit_enabled, state, loginuid, sessionid, sid);
if (!rc)
audit_ever_enabled |= !!state;
return rc;
irq
Сокращение от Interrupt Request, явная специфика ядра Linux, врядли в другом проекте такое название было бы 10 по встречаемости.
int irq_set_handler_data(unsigned int irq, void *data)
reg
Тоже нечто специфичное для ядра, видимо сокращение от Register. Используется в основном во всяких низкоуровневых драйверах.
reg = mfc_read(dev, S5P_FIMV_ENC_PIC_TYPE_CTRL);
reg &= ~(0x3 << 16);
reg |= (p->num_b_frame << 16);
mfc_write(dev, reg, S5P_FIMV_ENC_PIC_TYPE_CTRL);
p
Переменная для тех, кому жалко букв на название, потому что в неё что только не складывают. В одних местах она заменяет i, в других является массивом символов, в третьих является сокращением от Page.
for (int p = 0; p< BUFSIZE; p++)
char *p;
int p = t / (PAGE_SIZE / RADEON_GPU_PAGE_SIZE);
Сокращения
В топ попало довольно много названий, обозначающих по сути одно и то же:
- ret (25533), retval (2624), r (2209) // Если их сложить, то они даже обгонят i по встречаемости!
- err (13319), error (3116)
- len (8410), count (7644), size (6145), n (2104), length (1334), cnt (707)
- result (2331), res (1378)
- val (4696), value (2127)
Magic
В благодарность дочитавшим или пролиставшим до этого места подарок: список переменных, в названии которых содержится magic.
- magic (50)
- badmagic (5)
- magic2 (4)
- magic1 (3)
- amagic (2)
- bmagic (2)
- magicptr (2)
- magic_packet (2)
- magic_len (2)
- sigret_magic (1)
- magicok (1)
- end_magic (1)
- last_magic_err (1)
- hashmagic (1)
int magicok = (buf->magic == BUF_MAGIC);
buf->magic = -1;
if (magicok) {
kmem_cache_free(dma_kmem, buf);
} else {
printk("s3c2410_dma_freebuf: buff %p with bad magic\n", buf);
}
Инструменты
Для подсчета статистики использовался несложный код на C#, собирающий все файлы *.c и ищущий в них строки по следующему регулярному выражению:
new Regex(@"(char|short|int|long|float|double|size_t|bool)\s+(\w|_)*?(\*)?\s*(?<target>(\w|_)+(\w|\d|_)*)\s*[;=),]")
Предположительно он должен находить все объявления переменных примитивных типов, различные структуры я не учитывал. Корректность этого выражения подтверждена только усидчивой ручной проверкой и исправлением, но свою задачу он выполняет.