__ припишите __ в GNU C

Веб-сервер Visual Studio меньше прощает [приблизительно 110] в пути.

Это откажется вручать ссылку как: http://localhost:52632/main//images/logo.jpg, где IIS сделает.

Это довольно неясно, но означает, что у нас есть большая фиксация, чтобы сделать для избавлений от весь эти // случаи.

48
задан mlp 15 December 2014 в 15:03
поделиться

4 ответа

Атрибуты GCC:

  • Описание атрибутов функции здесь
  • Описание атрибутов переменных здесь
  • Описание атрибутов типа здесь
36
ответ дан 7 November 2019 в 12:35
поделиться

Для компиляторов, совместимых с GCC и GCC, используется __ attribute __ , большинство других компиляторов используют директивы #pragma .

Я думаю, что решение GCC лучше, поскольку обязательное поведение нераспознанного #pragma - игнорировать его, тогда как если вы используете компилятор, который не понимает спецификацию __ attribute __ , он не будет компилироваться - что в целом лучше, поскольку тогда вы знаете, что вам нужно портировать.

Спецификации атрибутов используются для определения аспектов типов, данных и функций, таких как хранение и выравнивание, которые не могут быть указаны с помощью C. Часто они зависят от цели, в основном они непереносимы, конечно между компиляторами и часто между целями. Избегайте их использования, за исключением случаев, когда это абсолютно необходимо для правильной работы кода.

27
ответ дан 7 November 2019 в 12:35
поделиться

Одно из применений - принудительное выравнивание памяти для переменных и элементов структуры. Например,

float vect[4] __attribute__((aligned(16)));

будет гарантировать, что вектор будет помещен на 16-байтовую границу памяти. Я не знаю, является ли это gcc-измом или более широко применимо.

Компилятор обычно выравнивает вектор только по 4-байтовой границе. С 16-байтовым выравниванием его можно использовать непосредственно с инструкциями загрузки SIMD, где вы загружаете его в 128-битные регистры, которые позволяют сложение, вычитание, скалярные произведения и все виды векторных операций.

Иногда вам нужно выравнивание, чтобы структура может быть непосредственно наложена на отображенные в память аппаратные регистры. Или он должен быть выровнен, чтобы оборудование могло писать в него напрямую, используя механизм прямого доступа к памяти (DMA).

18
ответ дан 7 November 2019 в 12:35
поделиться

Почему он используется в программах на языке C? Чтобы ограничить их переносимость.

Он начинается с двойного подчеркивания, поэтому он находится в пространстве имен разработчика - это не что-то определенное в языковом стандарте, и каждый поставщик компилятора может использовать его для любых целей.

Править : Почему он используется в программах GNU C? См. Другие ответы на этот вопрос.

-5
ответ дан 7 November 2019 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: