2010-11-26 68 views
1

聲明:我不是C程序員。使用預處理器將代碼轉換爲字符串

我最近看到一個朋友的項目。由於我不明白的原因,他將代碼寫入運行時編譯的字符串中。這導致類似:

char x[] = "int y = 5; printf(\"%i\", y)"; 
run_this_code(x); 

這是可怕的使用,因爲Visual Studio不會在步驟做語法高亮等

使用一些預處理器濫用,這是可以做到的伎倆Visual Studio的成認爲你正在編寫真正的代碼,然後在編譯器掌握源代碼之前讓預處理器將它變成一個字符串。這工作:

#define STRINGIFY(x) #x 

int main(void){ 
     char[] y = STRINGIFY(
       int x = 5; 
       printf("%i", x); 
     ); 
     printf("%s", y); 
} 

的問題,這是它打印出:

int x = 5; printf("%i\n", x); 

的問題則是運行時編譯器說,第1行的錯誤是沒有使它包括新行的一種方式?

更新這不是我的問題。這是別人的代碼,我只是對使用預處理器讓他的生活更輕鬆的想法感興趣。我不知道他爲什麼這樣做。

更新刪除所有提到的CUDA,因爲這個問題是關於預處理器,而不是CUDA。

+0

不工作? char x [] =「int x = 5; \ n printf(\」%i \「,x)」; – fazo 2010-11-26 10:25:55

+0

我想要做的事情的目標是將VS欺騙成語法突出顯示,「intellisensing」等編寫在字符串中的代碼。 – 2010-11-26 11:08:57

回答

3

我第一次建議,只是逃避換行應該就夠了。有時間來驗證(並看到問題所有者的評論),我意識到這並沒有削減它。

我做了一些測試,並在新行符號明確地把似乎工作:

char[] y = STRINGIFY(
       int x = 5;\n 
       printf("%i", x);\n 
     ); 

我只測試了在Linux上雖然不是在語法感知的IDE。這些「裸露的」換行符可能會被巧妙的語法高亮顯示標記爲語法錯誤。

3

在CUDA中進行編碼時,必須將所有代碼以字符串的形式發送到圖形卡進行編譯。

是什麼讓你說這個?看看CUDA SDK示例,您可以將CUDA代碼放入.cu文件,然後使用nvcc進行編譯。你可以有語法高亮顯示,intellisense和所有Visual Studio的優點!請參閱CUDA編程指南和this post以獲取更多信息

相關問題