2013-03-12 4 views
4

Я использую CUDA для ускорения некоторых частей программы C. Эта программа использует некоторые ключевые слова C++ в качестве идентификаторов, поэтому она не компилируется как C++. Теперь, когда я изменил его с помощью CUDA, как я могу скомпилировать его с помощью NVCC?Ключевые слова C++ для кода CUDA C

Например, я получаю ошибку:

table.h(65): error: expected an identifier 

при компиляции кода:

struct sw_table_position { 
    unsigned long private[4]; 
}; 

который отлично действует C, но недопустимый C++. Я использую CUDA 5.

+0

Это код хоста внутри файла .cu, я беру его? – talonmies

+2

Почему бы не искать и не заменять 'private' в вашем коде каким-то еще? – didierc

+0

@didierc Источник не «мой». Это бесплатное программное обеспечение, которое я ожидаю для слияния будущих обновлений с моими изменениями. Я не хочу меняться, чтобы облегчить мою работу в будущем. – lvella

ответ

4

NVCC компилирует код C++, а не код C. Даже если он притворяется, что потребляет код C, на самом деле вы просто получаете более C-образное поведение, а не компилятор C (see this post). По этой причине private является ключевым словом и не может использоваться как идентификатор (как и любое другое ключевое слово C++).

Фактически --host-compilation C является устаревшим (он не должен использоваться с nvcc), потому что на самом деле он не делает то, что вы ожидаете.

+0

Итак, nVidia ошибочно рекламирует поддержку C/C++? – lvella

+1

Только неправильная реклама ** C поддержка **. На самом деле это компилятор C++ с отключенными функциями _some_ C++. Итак, строго говоря, вы не пишете C-код, а C++-код с чем-то меньшим. Во всяком случае, не так плохая реклама, они описывают это _issue_ на своем веб-сайте. ;) –

+0

Мне жаль, что я не видел их описание _issue_ раньше ... – lvella

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