Я использую cuda в C++, компилятор cuda «понимает» определенные ключевые слова (например, Глобальный), но подсветка синтаксиса Visual Studio распознает эти ключевые слова как ошибки, хотя это ничего не ломает, это довольно раздражает.
есть ли способ заставить визуальную студию распознать эти ключевые слова (не нужно их переопределять, просто заставьте визуальную студию понять, что они существуют).
__global__ void func(int* a, int* b)
{
int place = blockIdx.x * blockDim.x + threadIdx.x;
///more code
}
@MSalters да, и ошибка на вкладке «ошибки».
Проблема здесь в задействованных компиляторах. Visual Studio имеет довольно умный редактор с так называемой функциональностью Intellisense. Этот редактор включает в себя настоящий компилятор C++ — синтаксический анализ C++ просто невозможен без него. Теперь __global__
не является ключевым словом C++, поэтому у Intellisense есть все основания жаловаться.
В качестве обходного пути, поскольку это настоящий компилятор, вы можете воспользоваться этим:
#if defined __INTELLISENSE__
#define __global__
#endif
Теперь препроцессор Intellisense удалит __global__
и скомпилирует остаток как обычный C++. Intellisense на самом деле не связывается, так что в дальнейшем не будет никакого вреда.
удалит ли препроцессор Глобальный из кода или просто то, что видит intellisense, в конце концов, мне нужно это ключевое слово, чтобы компилятор nvidia скомпилировался правильно.
@GideonMax: Вот почему я подчеркиваю, что существует несколько компиляторов. Препроцессор компилятора Intellisense отличается от препроцессора компилятора CUDA. Первые удалят, вторые нет. Очевидно, что это может быть опасно, потому что это означает, что они не компилируют один и тот же код. Но в данном конкретном случае это нормально.
Под «ошибками» вы подразумеваете красное морщинистое подчеркивание Intellisense? Также есть раскрашивание ключевых слов, и это другой механизм.