2013-03-12 104 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 2013-03-12 14:31:52

+2

爲什麼不用別的東西來搜索和替換代碼中的'private'? – didierc 2013-03-12 14:38:57

+0

@didierc來源不是'我的'。這是一個免費的軟件,我希望將未來的更新與我的更改合併在一起。我不想在未來改變事情來促進我的工作。 – lvella 2013-04-07 16:51:41

回答

4

NVCC編譯C++代碼,而不是C代碼。即使它假裝消耗在現實中的C代碼,你只是得到一個更類似C的行爲,而不是C編譯器(see this post)。出於這個原因private是一個關鍵字,並且不能被用作標識符(像任何其他C++關鍵字)。

實際上--host-compilation C已棄用(它不應該與nvcc一起使用),因爲它實際上並不符合你的期望。

+0

那麼,nVidia是否錯誤地爲C/C++廣告支持? – lvella 2013-03-12 13:52:35

+1

只是錯誤的廣告** C支持**。實際上,它是一個禁用了_some_ C++功能的C++編譯器。所以,嚴格來說,你不是在編寫C代碼,而是在C++代碼中使用較少的東西。無論如何,不​​是不好的廣告,他們在他們的網站上描述這個_issue_。 ;) – 2013-03-12 13:59:45

+0

我希望我早點看過他們的_issue_說明...... – lvella 2013-03-12 14:02:30