๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ ๋ณด์•ˆ·์ทจ์•ฝ์ /๐Ÿ”ธ์‹œ์Šคํ…œ·์šด์˜์ฒด์ œ

[ubunbtu] sscanf, argc/argv ์‹ค์Šต

by Jenny:! 2023. 9. 18.

 


1. gcc ์ปดํŒŒ์ผ

 

1.1 gcc ์ปดํŒŒ์ผ ์˜ต์…˜

 

-o

 c์ฝ”๋“œ ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๋ฉฐ, ์ง€์ •ํ•œ ์ด๋ฆ„์œผ๋กœ ์ถœ๋ ฅ ํŒŒ์ผ์„ ์ œ๊ณตํ•œ๋‹ค.

 

-Werror

์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

 

-Wall

์˜ค๋ฅ˜์™€ ๊ฒฝ๊ณ ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•œ๋‹ค.

 

-ggdb3

gdb๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค.

-g ์˜ต์…˜์€ ๋””๋ฒ„๊น…์„ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

 

-lm

math.h ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์†Œ์Šค ํŒŒ์ผ์— ์—ฐ๊ฒฐํ•œ๋‹ค.

-l ์˜ต์…˜์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—ฐ๊ฒฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

-std=c11

source.c ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด ํ‘œ์ค€์˜ c11 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฃจํ”„ ์ดˆ๊ธฐํ™”์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณดํ†ต ์ตœ์‹  ํ‘œ์ค€ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

-c

ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ์ฒด ํŒŒ์ผ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

-v

์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

-S

์–ด์…ˆ๋ธ”๋ฆฌ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

gcc -S -o src.asm src.c

 

 

 

1.2 gcc ์ปดํŒŒ์ผํ•˜๊ธฐ

 

geditor๋ฅผ ์ด์šฉํ•ด src.c ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

 

$ gedit src.c &

 

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ & ์—ฐ์‚ฐ์ž๋ฅผ ๋ถ™์ด๋ฉด, ์ฝ”๋“œ ์—๋””ํ„ฐ ์‹คํ–‰์ฐฝ์„ ๋„์ง€ ์•Š์•„๋„ ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

์•„๋ž˜๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํŒŒ์ผ์ด๋‹ค.

/*src.c*/
#include <stdio.h>

main(){
	printf("hello world!!");
}

๋ฌธ์ž์—ด์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

/

 

์•„๋ž˜๋Š” math.h ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

/*src2.c*/
#include <math.h>
#include <stdio.h>

int main() {
	printf("Square root of %lf is %lf\n", 225.0, sqrt(225.0));
	printf("Square root of %lf is %lf\n", 300.0, sqrt(300.0));
	
	return (0);
}

 

sqrt๋Š” ์ œ๊ณฑ๊ทผ ๊ณ„์‚ฐ์„ ํ•œ๋‹ค.

 

 

 

-lm ์˜ต์…˜์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

 

 

 

 

 

 

 

 


2. sscanf

 

 

sscanf ( ์ž…๋ ฅ, ํฌ๋งท, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์œ„์น˜ )

 

 

/*sscanf_test.c*/
#include <stdio.h>

int main() {
	char sentence [] = "John is 12 years old";
	char str [10];
	int i;

	sscanf (sentence, "%s is %d", str, &i);
	printf ("%s -> %d\n", str, i);

	return 0;
}

 

 

/

 

/*sscanf_test2.c*/
#include <stdio.h>

int main() {
	char sentence []="John_nnnnn_nnnnn is 12312312319982312 years old";
	char str [10];
	int i;

	sscanf (sentence, "%s is %d", str, &i);
	printf ("%s -> %d\n", str, i);

	return 0;
}

 

๊ฐ๊ฐ str์˜ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๋ฌธ์ž์—ด๊ณผ, integer๊ฐ€ ์ €์žฅํ•  ์ˆ˜ ์—†๋Š” ํฐ ์ˆซ์ž๊ฐ€ ์ง€์ •๋˜์—ˆ๋‹ค.

 

 

 

์ปดํŒŒ์ผ ํ›„ ์‹คํ–‰ํ•˜๋ฉด, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฆ„์˜ ๊ฒฝ์šฐ 10์ž๊ฐ€ ๋„˜์–ด๊ฐ€๋Š”๋ฐ, ์ถœ๋ ฅ๋˜๊ธด ํ•œ๋‹ค.

 

 

 

 

 

 

 


3. Argc/Argv

 

 

 

/*arg_test.c*/
#include <stdio.h>

int main(int argc, char *argv[]) {
	int count;
	printf ("This program was called with \"%s\".\n", argv[0]);
	if (argc > 1) {
		for (count =1; count < argc; count++){
			printf("argv[%d] = %s\n", count, argv[count]);
		}
	}
	else {
		printf("The command had no other arguments.\n");
	}
	return 0;
}

 

main ๊ด„ํ˜ธ ์•ˆ์€, ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์˜ ํ˜•ํƒœ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค.

 

 

 

๋งˆ์ง€๋ง‰ ๋ช…๋ น์€ argc๊ฐ€ 5๊ฐœ์ธ ๊ฒƒ์ด๋‹ค.