Существует ли переносимый эквивалент __attribute__ (чистого) gcc? - PullRequest
9 голосов
/ 30 сентября 2010

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

В настоящее время я использую gcc в качестве компилятора, и мне интересно, есть ли переносимый способ сделать:

int foo(int) __attribute__ ((pure))

Информацию о чистом ключевом слове можно найти здесь: http://www.ohse.de/uwe/articles/gcc-attributes.html#func-pure

Как бы я реализовал что-то подобное, если чистое ключевое слово недоступно?

Ответы [ 4 ]

7 голосов
/ 30 сентября 2010

Нет, нет.

4 голосов
/ 27 июня 2018

Начиная с C ++ 11, вы можете использовать стандартизированный синтаксис со специфическими атрибутами GCC:

[[gnu::pure]]
int foo(int)

Начиная с C ++ 17, это гарантированно подойдет для любогокомпилятор, поскольку, если они не распознают [[gnu::pure]], они должны игнорировать его без ошибок.

4 голосов
/ 30 сентября 2010
#ifdef __GNUC__
#define __pure __attribute__((pure))
#else
#define __pure
#endif

Используйте __pure, когда вам это нужно

2 голосов
/ 30 сентября 2010

Я думаю, что переносимый способ - это встроить функции и надеяться, что компилятор выяснит все остальное.

...