์๋
ํ์ธ์,
ctags๋ฅผ ์ฌ์ฉํ์ฌ C๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค (ํ๊ธฐ์ฐฌ ctags์๋ ์์).
๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
#include <stdio.h>
#define PRAGMA(x) _Pragma(#x)
PRAGMA(bar)
int foo() {
int a = 1;
printf("a = %d\n", a);
}
void main(void) {
foo();
}
ctags ํ์ผ์ ์ถ๋ ฅ์๋ ์๋์ ๊ฐ์ foo()
ํจ์๊ฐ ์์ต๋๋ค.
PRAGMA f.c /^#define PRAGMA(/;" d file:
PRAGMA f.c /^PRAGMA(bar)$/;" f
main f.c /^void main(void) {$/;" f
๊ฐ์ฌ!!
์ ๊ณ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
์ค์ํ์ง๋ง์ด๋ฅผ ๊ณ ์น๋ ๊ฒ์ ์ฝ์ง ์์ต๋๋ค.
๋น๊ณต๊ฐ ์ฐธ๊ณ : get.c์ directiveDefine์ ๋งคํฌ๋ก ์ ์๋ฅผ ๊ธฐ๋กํด์ผํฉ๋๋ค.
๋ด๊ฐ ์ผํ๋ ์ฝ๋ฅดํฌ ์ธต์ ๊ฐ์ง์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์
๋ ฅ ์คํธ๋ฆผ์ ํดํนํด์ผํฉ๋๋ค.
geany์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์
๋ ฅ ์คํธ๋ฆผ์ ํ์ธํด์ผํฉ๋๋ค.
๋ฟก ๋นต๋จ
์ง์ ์ด ์์์ต๋๊น?
์ง์ ์ด ์ด๋๊ฐ์ ์์ต๋๊น?
์๋์.์ด ์ฃผ์ ์ ๋ํด ์๋ฌด๊ฒ๋ํ์ง ์์ต๋๋ค.
ctags -I 'PRAGMA+'
๋ฅผ ์ฌ์ฉํ์ฌ ๋งคํฌ๋ก ํ์ฅ ๋ถ๋ถ์ ๊ฑด๋ ๋ธ ์ ์์ต๋๋ค.
๋น๊ณต๊ฐ ์ฐธ๊ณ : get.c ์ฝ๋ฅดํฌ ๋ ์ด์ด์ directiveDefine์ ๋งคํฌ๋ก ์ ์๋ฅผ ๊ธฐ๋กํด์ผํฉ๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ๋งคํฌ๋ก ์ฌ์ฉ์ ํด๊ฒฐํ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ง์ ๊ฒ์ด ํฌํจ ๋ ํค๋์์ ๋น๋กฏ๋๊ณ ์ด์ํ ๊ฒ์ผ๋ก ํ์ฅ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ํ C ์ ์ฒ๋ฆฌ ๊ธฐ๊ฐ ์์ผ๋ฉด ์๋ฒฝํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ ๋งคํฌ๋ก ํ์ฅ์ ์ถ์ ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๋ณต์ก์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ์ง ๊ถ๊ธํฉ๋๋ค.
@ b4n , ๋์ํฉ๋๋ค.
๋๋ ํธ๋ฆญ์ ๋ชจ๋ฅด์ง๋ง ์๋ก์ด ๊ตฌ๋ฌธ ๋ถ์์ด ์ด๊ฒ์ ํด๊ฒฐํฉ๋๋ค.
๋๋ ์ป์๋ค :
PRAGMA /tmp/enum.c /^#define PRAGMA(/;" d file:
foo /tmp/enum.c /^int foo() {$/;" f
main /tmp/enum.c /^void main(void) {$/;" f
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ํธ๋ฆญ์ ๋ชจ๋ฅด์ง๋ง ์๋ก์ด ๊ตฌ๋ฌธ ๋ถ์์ด ์ด๊ฒ์ ํด๊ฒฐํฉ๋๋ค.
๋๋ ์ป์๋ค :