반응형

출처 : http://stackoverflow.com/questions/3437404/min-and-max-in-c

C언어에서 MIN과 MAX

C에서 정의된 MINMAX가 어디에 있습니까?

가능한 일반적이고 안전하게 이를 구현하는 최고의 방법은 무엇입니까? (주요 컴파일러에서 사용하는 컴파일러 확장/빌트인을 선호합니다.)


15 개의 답변 중 1 개의 답변

C에서 정의된 MINMAX 가 어디에 있습니까?

없습니다.

가능한 일반적이고 안전하게 이를 구현하는 최고의 방법은 무엇입니까? (주요 컴파일러에서 사용하는 컴파일러 확장/빌트인을 선호합니다.)

함수로써 저는 #define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))같은 매크로를 사용하지 않을 것입니다. 특별히, 당신의 코드에 배포할 계획이 있다면요. GCC 구문 표현에서 당신 스스로 표준인 fmax또는 fmin같은 것을 사용하거나 GCC의 typeof를 사용한 매크로를 고칠것입니다. (타입에 안전함도 보너스로 얻을 것입니다.)

#define max(a,b) \
   ({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a : _b; })

모두가 "아, 이중 평가에 대해 알고 있습니다. 문제가 없습니다."라고 말하고 몇 달 후에는 몇 시간 동안 가장 어리석은 문제를 디버깅하게 될 것입니다.

typeof 대신에 __typeof__를 사용하세요.

만약 ISO C 프로그램에서 include될 때 당신이 헤더파일을 작성한다면 typeof 대신에 __typeof__를 써야 작동될 것입니다.

반응형
반응형

출처

http://stackoverflow.com/questions/4466655/how-do-i-specify-what-function-to-export-from-so-library-when-compiling-the-c

C 코드를 컴파일할 때 .so 라이브러리로 부터 특정함수만 export하는 방법?

저의 "C" 코드에는 많은 함수들이 있습니다. .so를 컴파일할 때 .so 파일에 모든 이름을 볼 수 있습니다. 어떻게 export될 함수들만 지정할 수 있습니까? (내부적으로 사용되는 거는 공개되지 말아야 합니다.)


2개의 답변 중 1개의 답변

.so 파일을 언급하셨기 때문에, gcc나 gcc같은 컴파일러를 사용하신다고 가정합니다.

기본적으로 모든 extern 함수들은 연결된 object에서 보실 수 있습니다. 당신은 함수와 (전역변수를) hidden 속성을 사용하여 각 경우에 대해 (같은 라이브러리의 다른 소스 파일로부터 사용되는 함수를 extern으로 나둔 채로) 숨기실 수 있습니다.

int __attribute__((visibility("hidden"))) foo(void)
{
    return 10;
}

다른 방법으로 당신은 gcc-fvisibility=hidden 옵션을 보냄으로서 default를 hidden으로 바꿀 수 있습니다. 다음을 사용하여 export할 특별한 표시를 할 수 있습니다.

__attribute__((visibility("default")))
반응형

+ Recent posts