ctrl + shift + o : 자동 import
shift + f2 : 레퍼런스 문서
ctrl + space : 코드 자동 완성
ctrl + / : 블럭 지정한 영역 주석처리
ctrl + i : 소스 정렬
ctrl + shift + f : 소스 정렬
alt + shift + s + v : 소스 오버라이딩


티스토리가 파이어 폭스에서도 잘돌아가고 꽤 괜찮다길래 한본 보고서 마음에 팍 하고 feel 이 꽃혀서
이쪽으로 왔는데 막상 파이어폭스로 글을 적으려고 하니 일부 기능이 돌아가지 않거나 이지웍 글쓰기
모드는 제목만 써지고 안돌아 가는게 아니겠는가!

검색을 해보니 원격 블로깅으로 하는 방법이 있었지만 이건 내 취향이 아닐뿐더러 프로그램에
비밀번호같은걸 적어두느니 방법을 찾아내겠다고 눈 땡그랗게 뜨고 여기 저기 찾아본결과
못찾아서 ies4linux 라는 wine 을 이용한 익스플로러와 vmware 에서 쓰는걸 이용하다가
ies4linux의 반짝임 안구공격과 vmware 의 귀차니즘 정신공격으로 인해 다시 한번 검색을하였고

드디어 방법을 찾아내게 되었다. 무척이나 간단한 방법으로 아래에 적어두도록 하겠다.
이 방법을 알려주신 작은상자님께 감사의 말씀을!

부디 다른 리눅스 유저들도 나와같은 상황이 었다면 그 문제로 부터 해방되길 바란다.

----------------

파이어 폭스의 주소창에서

about:config

를 치면 정말열래? 하는 창이 뜰건데 과감히 응! 이라고 눌러준다. 그럼 파이어 폭스의 설정창이 뜨는데
한 중간 쯤 쭉 내려가면

general.useragent.extra.firefox

라는 값이 있을것이다.  아마 설치한 리눅스 버전에 따라 우측에 각기 파이어 폭스의 이름이 적혀있을
것이다. 본인의 경우 아치리눅스를 사용하는데 파라다이스 뭐시기 였다. 데비안이면 아마 아이스 위즐
일것이고...  아무튼 이부분을 버전부분은 수정할 필요 없고

Firefox/3.0.x

이런식으로 버전만 놔두고 앞에 이름을 수정한다음 창을 닫아주면된다.

그 이후부터는 아무런 문제없이 사용이 가능할 것이다. 이 문제는 아마 브라우저의 제목창의 이름값으로
사용하는 브라우저의 종류를 구분하고 거기에 맞추어 모드를 구현하면서 발생하는 문제인것 같다.

윈도우의 경우 파이어 폭스라는 이름으로 고정되어 있으니 문제가 없었으나 리눅스의 경우 이름에 관련된
저작권 문제로 각자 이름이 다르게 되면서 이와 같은 문제가 발생한 것같다. 개발자들에게 이것도
고쳐달라고 하고 싶긴 한데 그럼 너무 미안해질거 같은 느낌이.. ㅎㅎ

출처 : http://ranoking.tistory.com/4
1. 자기 자신의 클래스와

2. 같은 패키지 내의 클래스와

3. 그 클래스를 상속받는 클래스

모두에서 접근이 가능하다.

c++에서는 자기 자신의 클래스와 자식 클래스의 멤버 함수로부터의 접근만 허용한다.

addr2line : 바이너리 파일에서 특정 주소가 어떤 파일의 어떤 행인지 보임
ar : 정적 라이브러리를 만들고 수정
as : GNU 어셈블러
gprof : 프로파일 정보 출력
ld : GNU 링커(collect2 대신에 사용될 수 있다)
nm : ELF 포멧 오브젝트 파일의 내부 심벌을 보임
objcopy : 오브젝트 파일을 복사 및 변환
objdump : 오브젝트 파일을 덤프하거나 역어셈할 때 사용
ranlib : 정적 라이브러리 내에 인덱스를 생성할 때 사용
readelf : ELF 포멧의 오브젝트 파일의 정보를 보임
size : 오브젝트 파일의 사이즈 정보 출력
strip : 오브젝트 파일의 사이즈를 줄임




gcc 전역 옵션

옵션

설명

-E

전처리 과정 화면에 출력

-S

어셈블리 파일 생성

-c

오브젝트 파일 생성

-v

컴파일 과정 화면에 출력

--save-temps

컴파일 생성되는 중간 파일 저장

-da

컴파일 과정에서 생성되는 중간 코드 생성(RTL 파일 생성)


전처리기(cpp0) 옵션

옵션

설명

-I[패스]

헤더 파일을 탐색할 디렉토리 지정

-include [헤더 파일 패스]

해당 헤더 파일을 모든 소스 추가

-D[매크로]

외부에서 #define 지정

-D[매크로]=[매크로 ]

외부에서 해당 매크로를 정의하고 값을 지정

-U[매크로]

외부에서 #undef 지정

-M 또는 –MM

make 기술 파일을 위한 소스 파일의 종속 항목 출력

-nostdinc

표준 C 헤더 파일을 include하지 않음

-C

전처리 과정에서 주석을 제거하지 않음

-Wp,[옵션리스트]

옵션 리스트를 전처리기에 바로 전달


C 컴파일러(cc1) 옵션
- C 언어 옵션

옵션

설명

-ansi

ANSI C 문법으로 문법 검사

-std=[C 표준]

지정한 C 표준으로 문법 검사(표준: c89,c99,gnu89,gnu99 )

-traditional

K&R C 문법으로 문법 검사

-fno-asm

asm, inline, typeof 키워드를 사용하지 않음(gnu89 문법 기준)


- 경고 옵션

옵션

설명

-Wall –W

모든 경고 메시지 출력

-w

모든 경고 메시지 제거

-Werror

모든 경고를 오류로 취급하여 컴파일 중단

-pedantic

C89 표준에서 요구하는 모든 경고 메시지를 표시

-pedantic-errors

C89 표준에서 요구하는 모든 오류 메시지를 표시

-Wtraditional

ANSI C K&R C 간에 서로 다른 결과를 가져올 있는 부분이 있다면 경고


- 최적화 옵션

옵션

설명

-O0

아무런 최적화를 수행치 않음

-O1 또는 –O

최적화 레벨 1 수행

-O2

최적화 레벨 2 수행

-O3

최적화 레벨 3 수행

-Os

사이즈 최적화 수행


- 디버깅 옵션

옵션

설명

-g

바이너리 파일에 디버깅 정보 삽입

-pg

프로파일을 위한 코드 삽입


어셈블리(as) 옵션

옵션

설명

-Wa,[옵션 리스트]

어셈블러에게 옵션 리스트를 바로 전달

-Wa,-al

어셈블된 코드와 인스트럭션을 보임

-Wa,-as

정의된 심볼을 보임


링크(ld) 옵션

옵션

설명

-L[패스]

라이브러리 탐색 디렉토리 지정

-l[라이브러리 이름]

해당 라이브러리를 링크

-shared

공유 라이브러리를 우선하여 링크

-static

정적 라이브러리를 우선하여 링크

-nostdlib

표준 C 라이브러리를 사용하지 않음

-M 또는 –MM

make 기술 파일을 위한 소스 파일의 종속 항목 출력

-nostdinc

표준 C 헤더 파일을 include하지 않음

-Wl,[옵션 리스트]

옵션 리스트를 링크에 바로 전달



 .ascii "<string>"
: 데이터와 같은 문자열을 어셈블리에 삽입한다. armasm의 DCB와 동일한 기능을 가진다.

 .asciz "<string>"
: .ascii와 동일한 기능을 가지지만 0 바이트를 가진 문자열이 나온다.

 .balign <power_of_2> {,<fill_value>{,<max_padding>}}
: 주소를 <power_of_2> 바이트로 정렬한다. 어셈블러는 <fill_value>나 적절한 디폴트 값을 추가하여 정렬을 맞춘다. 만약 <max_padding>보다 더 많은 fill 바이트가 필요하다면 정렬되지 않을 것이다. 이것은 armasm의 ALAIN과 유사하다.

 .byte <byte1> {,<byte2>} ...
: 데이터와 같은 바이트값을 어셈블리에 삽입한다. armasm의 DCB와 동일한 기능을 가진다.

 .code <number_of_bits>
: 명령어 폭을 비트로 설정한다. Thumb 어셈블리에서는 16을, ARM 어셈블리에서는 32를 사용한다. armasm에서의 CODE16과 CODE32와 유사하다.

 .else
: .if와 .endif와 함께 사용한다. armasm에서의 ELSE와 유사하다.

 .end
: 어셈블리 파일의 끝을 나타낸다. 보통 생략 가능하다.

 .endif
: 조건부 컴파일 코드 블록을 끝낸다(.if, .ifdef, .ifndef 참고). armasm에서의 ENDIF와 유사하다.

 .endm
: 매크로 정의를 끝낸다. armasm에서의 MEND와 유사하다.

 .endr
: 반복 루프를 끝낸다. armasm에서의 WEND와 유사하다.

 .equ <symbol name>, <value>
: 이 지시어는 심볼값을 설정한다. armasm에서의 EQU와 유사하다.

 .err
: 에러가 있으면 어셈블리를 정지시킨다.

 .exitm
: 매크로를 빠져나온다. armasm에서의 MEXIT와 유사하다.

 .global <symbol>
: 이 지시어는 심볼을 외부 링크로 제공한다. armasm에서의 EXPORT와 유사하다.

 .hword <short1> {,<short2>} ...
: armasm에서의 DCW처럼 데이터로 16비트값 목록을 어셈블리에 삽입한다.

 .if <logical_expression>
: 조건부 코드 블록을 생성한다. 이 블록은 .endif를 사용하여 끝낸다. armasm에서의 IF와 유사하다.

 .ifdef <symbol>
: 만약 <symbol>이 정의되어 있다면 코드 블록을 포함한다. 이 블록은 .endif로 끝난다.

 .include "<filename>"
: 지정한 소스 파일을 포함한다. armasm에서의 INCLUDE 또는 C에서의 #include와 유사하다.

 .irp <param> {, <val_1>{, <var_2>} ...
: 값 목록에서 각 값에 대해 코드 블록이 반복된다. .endr 지시어를 사용하여 블록의 끝을 표시한다. 반복되는 코드 블록에서 값 목록 안에 연관된 값을 치환하기 위해서는 \<param>을 사용한다.

 .macro <name> {<arg_1>}{, <arg_1>} ... {, <arg_k>}
: k 파라미터를 가진 <name>이라는 이름의 어셈블러 매크로를 정의한다. 매크로 정의는 .endm으로 끝난다. 초기에 매크로에서 빠져나오기 위해서는 .exitm을 사용한다. 이 지시어는 armasm에서의 MACRO, MEND, MEXIT와 유사하다. 더미 매크로 파라미터 앞에는 \이 나와야 한다. 예를 들어, 다음과 같다.

.macro SHIFTLEFT a, b
           .if \b < 0
              MOV \a, \a, ASR #-\b
              .exitm
           .endif
           MOV \a, \a, LSL #\b
.endm

 .rept <number_of_times>
: 주어진 수만큼 코드 블록을 반복한다. .endr로 끝난다.

 <register_name> .req <register_name>
: 이 지시어는 레지스터의 이름을 짓는다. 오른쪽에  숫자가 아니라 이름이 나온다는 것을 제외하면 armasm에서의 RN과 유사하다. 예를 들면 acc.req r0이다.

 .sectoin <section_name> {, "<flags>"}
: 새로운 코드 색션 또는 데이터 색션을 시작한다. 보통 코드 색션 .text, 초기화된 데이터 색션 .data, 초기화되지 않은 데이터 색션 .bss를 호출해야 한다. 이것들은 디폴트 플래그를 가지고 있으며 링커는 이 디폴트 이름들을 이해하고 있다. 이 지시어는 armasm 지시어 AREA와 유사하다. 표 A.19는 ELF 포멧 파일을 위한 <flags>문자열을 나타내는데 사용되는 문자이다.

[표 A.19] ELF 포멧 파일을 위한 .section 플래그

플래그

a

섹션 할당

w

쓰기 가능한 섹션

x

실행 가능한 섹션


 .set <variable_name>, <variable_value>
: 이 지시어는 변수의 값을 설정한다. armasm에서의 SETA와 유사하다.

 .space <number_of_bytes> {, <fill_byte>}
: 주어진 바이트 수를 할당한다. 바이트들은 0이나 규정된 <fill_byte>로 채워져 있다. armasm에서의 SPACE와 유사하다.

 .word <word1> {, <word2>} ...
: armasm에서의 DCD와 같이 데이터로 32비트 워드값 목록들을 어셈블리에 삽입한다.


void quick_sort(int *data, int left, int right)
{
  int k;
  int i, j, pivot;
  i = left;
  j = right;
  pivot = left;

  if(i >= j)
    return;

  while(i < j)
  {
    while(data[++i] < data[pivot])
    {
      if(i >= right)
        break;
    }
    while(data[j] > data[pivot])
    {
      j--;
      if(j <= left)
        break;
    }
    if(i < j)
      swap(data, i, j);
  }
  swap(data, pivot, j);
  quick_sort(data, left, j - 1);
  quick_sort(data, j + 1, right);
}

void swap(int *data, int i, int j)
{
  int tmp;

  tmp = data[i];
  data[i] = data[j];
  data[j] = tmp;
}

// 버블 정렬
void bubble(int *arr, int size)
{
  int i, j;
  int tmp;

  for(i = 0 ; i < size - 1 ; i++)
  {
    for(j = 0 ; j < size - i - 1 ; j++)
    {
      if(arr[j] > arr[j + 1])
      {
        tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1= tmp;
      }
    }
  }
}







+ Recent posts