Это важно помнить: для gcc редкие аннотации не имеют смысла.Они по-прежнему могут быть полезны просто для того, чтобы сообщить программисту , что «эй, этот указатель, который вы получили, не был нормальным указателем» довольно читабельным образом, но в конце концов, если вы не используете разреженный, они нена самом деле делай что угодно.
ОДНАКО.Когда вы делаете использование синтаксического анализа, это совсем другое дело.Для слова «разреженный» этот «__iomem» имеет много значений:
# define __iomem __attribute__((noderef, address_space(2)))
, то есть «iomem» означает две разные вещи: это означает, что «разреженный» должен жаловаться
, если указатель когда-либо разыменовывается(это указатель «noderef») напрямую, и он находится в «адресном пространстве 2», а не в обычном адресном пространстве (0).
Теперь это означает, что sparse будет жаловаться, еслитакой указатель всегда передается в функцию, которая хочет обычный указатель (потому что это , а не нормальный указатель, и вы, очевидно, не должны делать с ним такие вещи, как "strcmp ()" и т. д.)также будет жаловаться, если вы попытаетесь привести его к другому указателю в другом адресном пространстве.