2010-11-26 3 views
1

면책 조항 : 프로그래머가 아닙니다.전 처리기를 사용하여 코드를 문자열로 변환하십시오.

최근에 친구의 프로젝트를 보았습니다. 이해할 수없는 이유 때문에 런타임에 컴파일되는 문자열에 코드를 씁니다. 이 같은 결과 : 비주얼 스튜디오에서 단계 및 일부 전처리 남용을 사용하는 등

구문 강조를하지 않기 때문에 사용이 끔찍

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

,으로 트릭 비주얼 스튜디오를 할 수 있습니다 실제 코드를 작성한 다음 컴파일러가 소스를 확보하기 전에 전처리기를 문자열로 바꾸는 것을 생각합니다. 이 작품 : 다음

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

문제를 런타임 컴파일러가 라인 1에 오류가 줄 바꿈을 포함 만드는 방법이 있나요 말한다이다

#define STRINGIFY(x) #x 

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

이의 문제가 밖으로 인쇄한다?

업데이트 이것은 내 문제가 아닙니다. 그것은 다른 누군가의 코드입니다, 저는 방금 프리 프로세서를 사용하여 자신의 삶을 편하게한다는 아이디어에 관심을 갖게되었습니다. 나는 그가 왜 이렇게하고 있는지 전혀 모른다.

업데이트은이 질문이 전처리 기가 아닌 CUDA에 관한 것이므로 CUDA에 대한 모든 언급을 삭제했습니다.

+0

이 방법이 효과가 있습니까? char x [] = "int x = 5; \ n printf (\"% i \ ", x)"; – fazo

+0

내가하고자하는 목표는 VS를 구문 강조, "인텔리 센싱"등과 같이 문자열에 쓰여진 코드로 속이는 것입니다. –

+1

무엇을하려고합니까? GPU에서 표준 출력으로 인쇄하려고하는 경우 올바른 방향에 있다고 생각하지 않습니다. – Marm0t

답변

3

나는 먼저 줄 바꿈을 이스케이프하면 충분하다고 제안했다. 확인 할 시간이 있었고 (질문 주인의 의견을 보았을 때), 나는 그것을 잘라 내지 못한다는 것을 깨달았습니다.

나는 몇 가지 테스트를했고, 명시 적으로 줄 바꿈 기호에 퍼팅 작동하는 것 같다 :

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

나는뿐만 아니라 구문 인식 IDE에서,하지만 리눅스에서이 작업을 테스트했습니다. 이러한 "맨 손으로 보이는"개행 문자 대신 영리한 구문 형광펜을 사용하여 구문 오류로 플래그를 지정할 수 있습니다.

3

CUDA로 코딩 할 때 모든 코드를 그래픽 카드에 보내 컴파일해야합니다.

당신이 무슨 말을합니까? CUDA SDK 예제를 살펴보면 .cu 파일에 CUDA 코드를 입력 한 다음 nvcc을 사용하여 컴파일 할 수 있습니다. 구문 강조, 인텔리 센스 및 모든 Visual Studio 장점을 사용할 수 있습니다! 자세한 내용은 CUDA 프로그래밍 가이드 및 this post을 참조하십시오.

+0

CUDA 작업에 대한 정보를 제공해 주셔서 감사합니다. 그러나이 질문은 CUDA가 아니라 전 처리기를 남용하는 것입니다. –

관련 문제