2010-09-07 2 views
0

Запуск ШиннаяSplint barfs на __thread, который является частью C99

[email protected]:~/cpfs$ splint -paramuse +gnuextensions cpfs.c 

останавливается на этой линии:

__thread int cpfs_errno; 

с ошибкой синтаксического анализа:

 
cpfs.c:127:13: Parse Error: Non-function declaration: __thread : 
       int. (For help on parse errors, see splint -help parseerrors.) 
*** Cannot continue. 

Проверка документации и полоскание не упоминается __thread. Однако __thread is part of the C99 spec, который, как утверждается, поддерживает Splint (вставить ссылку).

Что здесь происходит? Как я могу получить шину для распознавания __thread?

+0

Я не знал, что шина поддерживает C99. Когда это произошло? – detly

+0

Когда-то в 2002 году: http://lclint.cs.virginia.edu/release.html, «поддерживает большинство»: http://lclint.cs.virginia.edu/faq.html –

+0

Клянусь, я проверил их сайт не на шесть месяцев назад, и он сказал, что не поддерживает конструкции C99. – detly

ответ

3

От splint FAQ просто добавьте -D__thread= в командную строку шины. Это приведет к удалению ключевого слова __thread из кода, в то время как шина изучает его. Я предполагаю, что шина не особенно известна в потоке и не сможет использовать информацию, которая была передана в GCC по ключевому слову.

6

__thread не находится на C99. Это расширение GNU C - раздел, к которому вы привязаны, находится в пределах Extensions to the C Language Family. В нем описывается расширение с точки зрения изменений в стандарте C99, предположительно в качестве подготовки к его принятию в будущем пересмотре стандарта.

+0

О, хорошо, спасибо! –

+0

Я не уверен, что «__thread» не является частью c99. Другие комментарии здесь говорят, что это так. Разочарочно, единственное доказательство, которое я видел, поступает из gcc-документов: http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/C99-Thread_002dLocal-Edits.html - может ли кто-нибудь проверить реальный стандарт. –

+1

@Adrian Ratnapala: Ни слово «нить», ни «__thread» не появляются нигде в стандарте C99. Вы можете [загрузить копию N1256] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf), который представляет собой рабочий проект комитета, состоящий только из окончательного текста C99 с применением TC1, TC2 и TC3. – caf

Смежные вопросы