2013-10-28 2 views
0

마이크로 소프트 특정한 연장 C 도서관을 사용하는없이 VS2012에있는 C 프로그램을 쓰는 방법?C의 마이크로 소프트 특정 연장을 제거하십시오

예를 들어 scanf_s()는 Microsoft 특정 구현입니다. 그러나 우리가 그것을 사용한다면 우리는 리눅스에서 코드를 컴파일 할 수 없다.

그래서 Linux VM을 병렬로 사용하여 gcc의 코드를 컴파일해야합니다. 또는 우리는 Windows에서 gcc를 설정할 수 있습니다. 또는 더 좋은 옵션이 있거나 VS 2012에서이 작업을 수행하기 위해 조정할 수 있습니까?

+0

의 일부가 아닌 다른 추가 Microsoft 기능을 해제하는 유사한 방법을 찾을 수 있습니까? http://stackoverflow.com/a/5060359/2609288 – Baldrick

+0

가능한 복제본 http://stackoverflow.com/questions/5060034/vs2010-c-and-c-enforce-ansi-compliance-for-linux-gcc-compatibility – Baldrick

+0

Protable 코드를 작성하는 것은 쉬운 일이 아니며 사용자가 취해야 할 기능은 자신이 수행 한 기능에 따라 크게 달라집니다. 당신이 정말로 만들어야 할 것에 대해 더 많이 알지 못하면서 줄 수있는 최소한의 조언은 C 표준 라이브러리에 정의 된 함수에 충실하는 것입니다. C99를 사용하면 너무 보수적이지 않을 수 있습니다. http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf – alk

답변

0

"사용 안함 언어 확장"을 설정하면 단지 특정 언어 기능를 제거합니다. 이 기능의 목록은 여기 here입니다.

그러나 Microsoft에서 제공하는 기능은 언어 기능이 아닙니다.이 기능은 원하는 경우 사용할 수있는 선택 기능입니다. 그들은 그 환경에 의해 무력화되지 않습니다. _s가 붙은 표준 함수의 보안 버전이이 범주에 속합니다.

는 헤더에 scanf_s의 정의로 이동하는 경우, 당신은 마이크로 소프트가 기능이 특정 가족을 해제하는 방법을 제공 한 것으로 볼 수 있다고 말했다 가졌어요. 당신이 당신의 헤더 #include를

#define __STDC_WANT_SECURE_LIB__ 0 

하기 전에 코드에서 다음과 같이 정의하면

다음 scanf_s는 더 이상 컴파일되지 않습니다. 당신이 당신의 컴파일러 스위치를 통해이를 달성하려면

, 프로젝트 속성으로 이동하고, 처리기 정의를 찾을 수 있습니다. 마지막에 다음과 같은 정의를 추가

__STDC_WANT_SECURE_LIB__#0 

당신은 아마 이것이 당신이 찾고있는 무엇인가 '표준'C.

+0

없는 매우 사용자 친화적 인 방법을 잘 VS2012 컴파일,하지만 MS 편집기를 사용하여 지불 할 수있는 가격 필요가 있어요 아마도 표준적인 C 코드를 얻기 위해 이클립스 에디터를 사용하는 것이 쉬운 방법 일 것이다. – user2926764