ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
³ª °°Àº °æ¿ì ÀÏ´Ü µ¹¾Æ°¡´Â Äڵ带 ¸¸µé°í µ¹¾Æ°¡´ÂÁö ´«À¸·Î È®ÀÎÇÑ´ÙÀ½ ¼ÕÀ» º¸´Â ½ºÅ¸ÀÏÀ̶ó¼, ³ªÁß¿¡ ¸¹Àº ÀܼÕÁú - °ÅâÇÏ°Ô ¸®ÆÑÅ丵 -À» ÇÏ°Ô µÈ´Ù. À̶§ ¸ðµâÈ¿Í ÇÔ²² °¡Àå¸ÕÀú ¼Õ½±°Ô ÁøÇàÇÒ ¼ö ÀÖ´Â°Ô °æ°í¸Þ½ÃÁö¸¦ Á¦°ÅÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹®¼´Â gcc 4.0.x ¸¦ ±âÁØÀ¸·Î ÀÛ¼ºµÇ¾ú´Ù.
gcc¶ó¸é ´ÙÀ½°ú °°Àº ¿É¼ÇÀ» ÀÌ¿ëÇØ¼ °æ°í¸Þ½ÃÁö¸¦ Ãâ·ÂÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. # gcc -Wall -c testcode.c # gcc -W -c testcode testcode.c ...º¸ÅëÀº -Wall ¿É¼Ç¸¸À» »ç¿ëÇÏ´Â °æ¿ì°¡ ¸¹À» °ÍÀÌ´Ù. ±×·¯³ª °æ°í¸Þ½ÃÁö´Â ´Ù¾çÇÑ ¿µ¿ªÀ» °¡Áö°í ÀÖÀ¸´Ù. -Wall ÀÇ all¿¡ ¼ÓÁö ¸»±â ¹Ù¶õ´Ù. allÀ̶ó´Â ´Ü¾î°¡ ºÙÀº°Í °ú´Â ´Ù¸£°Ô, ÀϺοµ¿ªÀÇ °æ°í¸Þ½ÃÁö¸¸À» Ãâ·ÂÇØÁØ´Ù. ¿¹¸¦ µé¸é ¾Æ·¡¿Í °°ÀÌ ¸®ÅϰªÀÌ ¸í½ÃµÇÁö ¾ÊÀº °æ¿ì °æ°í¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. int foo (unsigned int x)
{
int y;
if (y < x) x=x+2;
else x= x+1;
}
-Wall ¿É¼ÇÀ» ÁÖ°í ÄÄÆÄÀÏ ÇØº¸ÀÚ. # gcc -Wall -c foo.c foo.c: In function `foo': foo.c:6: warning: control reaches end of non-void function±×·¯³ª if (y < x)¿¡¼ unsigned¿Í signed¿ÍÀÇ ºñ±³¿Í °°Àº °æ°í´Â Àâ¾Æ³»Áö ¾Ê´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. °á±¹ ¸ðµç °æ°í¸Þ½ÃÁö¸¦ ¾ø¾Ö°í ½Í´Ù¸é, ´Ù¾çÇÑ Á¾·ùÀÇ °æ°í¿É¼ÇÀ» ÇÔ²² »ç¿ëÇØ¾ß ÇÑ´Ù. -W
signed ¿Í unsignedÀÇ ºñ±³. Á¶°Ç¹®¿¡¼ body°¡ ¸í½ÃµÇÁö ¾Ê°Å³ª, °áÄÚµµ´ÞÇÒ ¼ö ¾ø´Â Á¶°Ç¹®µîÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù. ¾Æ·¡ÀÇ ÄÚµå´Â ÄÄÆÄÀÏµÇ°í ½ÇÇàµÇ´Âµ¥ ÀüÇô ¹®Á¦´Â ¾øÀ» °ÍÀÌ´Ù. ±×·¯³ª if (x < 0) ¹®Àº °áÄÚ ¸¸Á·ÇÒ ¼ö ¾ø´Ù. ÀÌ·¯ÇÑ ÄÚµå´Â ¹ö±×¸¦ ¸¸µé¾î³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù. int foo (unsigned int x)
{
if (x < 0)
return 0; // °áÄÚ µµ´ÞÇÒ ¼ö ¾ø´Ù.
else
return 1;
}
-Wall ¿É¼ÇÀ» ÀÌ¿ëÇÏ¸é °æ°í¸Þ½ÃÁö°¡ Ãâ·ÂµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.# gcc -Wall -c foo.c±×·¯³ª -W ¿É¼ÇÀ» ÀÌ¿ëÇÏ¸é ´ÙÀ½°ú °°Àº °æ°í¸Þ½ÃÁö°¡ Ãâ·ÂµÇ´Â°É È®ÀÎÇÒ ¼ö ÀÖ´Ù. # gcc -W -c foo.c foo.c: In function `foo': foo.c:4: warning: comparison of unsigned expression < 0 is always false
ÀϹÝÀûÀ¸·Î -W ¿É¼ÇÀº -Wall ¿É¼Ç°ú ÇÔ²² »ç¿ëÇÑ´Ù. -Wconversion
ÀÌ ¿É¼ÇÀº Çüº¯È¯(type conversion)°ú °ü·ÃµÇ¾î¼ À߸ø »ç¿ëµÈ Äڵ忡 ´ëÇÑ °æ°í¸¦ Àâ¾Æ³½´Ù. floating-point¿Í integer, long°ú short integers »çÀÌÀÇ Çüº¯È¯°ú °°Àº °ÍµéÀÌ´Ù. ¿¹¸¦ µé¾î¼ abs()´Â ½Ç¼öÇü Á¤¼ö¿¡ ´ëÇØ¼ Àý´ë°ªÀ» ¸®ÅÏÇÏ´Â ÇÔ¼öÀÌ´Ù. ¸¸¾à ÀÎÀÚ·Î float°ªÀ» ÀÔ·ÂÇÑ´Ù¸é ¿øÇÏÁö ¾Ê´Â °á°ú°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù. #include <stdio.h>
#include <stdlib.h>
int main (void)
{
double x = -3.14;
double y = abs(x); /* fabs(x)¸¦ »ç¿ëÇØ¾ß ÇÔ. */
printf ("x = %g |x| = %g\n", x, y);
return 0;
}
-Wall ¿É¼ÇÀ» ÁÖ°í ÄÄÆÄÀÏ Çϸé, °æ°í¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ±×·¯³ª ÇÁ·Î±×·¥À» ½ÇÇà½Ã۸é À߸øµÈ °á°ú¸¦ º¸¿©ÁÖ°Ô µÈ´Ù.# gcc -Wall -o abs abs.c # ./abs x = -3.14 |x| = 3
ÀÌÁ¦ -Wconversion ¿É¼ÇÀ» ÁÖ°í ½ÇÇà½ÃÄÑ º¸ÀÚ. # gcc -Wconversion -o abs abs.c
abs.c: In function ¡®main¡¯:
abs.c:7: warning: passing argument 1 of ¡®abs¡¯ as integer rather than
floating due to prototype
abs() ÇÔ¼ö´ë½Å¿¡ fabs()ÇÔ¼ö¸¦ ÀÌ¿ëÇϸé, À§ ÄÚµåÀÇ ³í¸®Àû¿À·ù¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.
ÀÌ ¿Ü¿¡µµ -Wconversion ¿É¼ÇÀº º¯¼ö¿¡ À߸øµÈ °ªÀ» ÇÒ´çÇÏ´Â ¿À·ùµµ ã¾Æ³½´Ù. unsigned int x = -1;±â¼úÀûÀ¸·Î ANSI/ISO C Ç¥ÁØÀº À§ÀÇ Äڵ带 Çã¿ëÇÑ´Ù. ±×·¯¹Ç·Î ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯°¡ ¿¡·¯¾øÀÌ ÄÄÆÄÀÏÀ» ÇØÁØ´Ù. ±×·¯³ª Äڵ尡 Á¦´ë·Î ÀÛµ¿ÇÒÁö´Â º¸ÀåÇÒ ¼ö ¾ø´Ù. -Wshadow
À̰ÍÀº ¼±¾ðµÈ º¯¼ö¸íÀ» ´Ù¸¥ scope¿¡¼ ´Ù½Ã ¼±¾ðÇÑ °æ¿ì °æ°í¸¦ ¹ß»ý½ÃŲ´Ù. ÀÌ·¸°Ô º¯¼ö°¡ ¼±¾ðµÉ °æ¿ì À̰ÍÀ» shadowingº¯¼ö¶ó°í ÇÑ´Ù. ´ÙÀ½ÀÇ Äڵ带 È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ. #include <stdio.h>
double test (double x)
{
double y = 1.0;
{
double y;
y = x;
}
return y;
}
int main (void)
{
printf("%lf\n", test(5.0));
}
2°³ÀÇ scope¿¡¼ yº¯¼ö°¡ ¼±¾ðµÇ¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù. À̰æ¿ì ºñ·Ï À̸§Àº °°Áö¸¸, scope°¡ ´Ù¸£¹Ç·Î ÀüÇô´Ù¸¥ º¯¼ö À̸§ Å×À̺íÀ» °¡Áö°Ô µÈ´Ù. ´ç½ÅÀÌ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯°¡ ANSI/ISO C¸¦ ÁؼöÇÑ´Ù¸é, 1À» ¸®ÅÏÇÒ °ÍÀÌ´Ù. shadowing º¯¼öÀÇ »ç¿ëÀÚü°¡ ¹®Á¦°¡ µÇ´Â°Ç ¾Æ´ÏÁö¸¸, º¸ÅëÀÇ °æ¿ì ½Ç¼ö·Î »ç¿ëÇÏ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î -Wshadow ¿É¼ÇÀ» ÀÌ¿ëÇØ¼ Á¦°ÅÇϵµ·Ï ÇÏÀÚ.# gcc -Wshadow -o abs abs.c abs.c: In function ¡®test¡¯: abs.c:7: warning: declaration of ¡®y¡¯ shadows a previous local -Wcast-qual
const¿Í °°Àº ŸÀÔ Á¦ÇÑÀÚ¸¦ À߸ø »ç¿ëÇßÀ» °æ¿ì °æ°í¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. ¾Æ·¡ÀÇ ÄÚµå¿Í °°Àº °æ¿ì´Ù. #include <stdio.h>
void f (const char * str)
{
char * s = (char *)str;
s[0] = '\0';
}
int main()
{
char *a = "hello World";
f(a);
}
ÀÌ ÇÁ·Î±×·¥Àº ¾Æ¹«·± ¹®Á¦¾øÀÌ ÄÄÆÄÀÏ µÉ °ÍÀÌ´Ù. ±×·¯³ª ½ÇÇà½Ã۸é segmentation fault¸¦ Ãâ·ÂÇϰí Á¾·áµÇ¾î ¹ö¸± °ÍÀÌ´Ù. ¿ÀÈ÷·Á À§ÀÇ °æ¿ì´Â ÇÁ·Î±×·¥ÀÌ Á×¾î¹ö¸²À¸·Î Áï½Ã ¹®Á¦¸¦ ãÀ» ¼ö ÀÖÀ¸´Ï Å« ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ÙÀ½°ú °°Àº °æ¿ì°¡ ¹®Á¦°¡ µÈ´Ù. int main() { char a[] = "hello World"; f(a); printf("%s\n", a); }¿ì¸®°¡ f ÇÔ¼öÀÇ ÀÎÀÚ¸¦ const ·Î ÇѰÍÀº strÀÌ º¯°æµÇ´Â°É ¸·±â À§ÇÑ ¸ñÀûµµ °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. ±×·±µ¥ À§ÀÇ °æ¿ì ÀǵµÇÏÁö ¾Ê°Ô strÀÌ º¯°æµÇ¾î ¹ö¸®°Ô µÈ´Ù. -Wcast-qual ¿É¼ÇÀ» ÀÌ¿ëÇϸé ÀÌ·¯ÇÑ ¹®Á¦¸¦ »çÀü¿¡ ¿¹¹æÇÒ ¼ö ÀÖ´Ù. # gcc -Wcast-qual -o f f.c f.c: In function ¡®f¡¯: f.c:5: warning: cast discards qualifiers from pointer target type -Wtraditional
´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯´Â ANSI/ISO Ç¥ÁØÀ» µû¸£Áö¸¸, Á» ´õ À¯¿¬ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï È®ÀåµÈ ºÎºÐÀÌ ÀÖ´Ù. ÀÌ ¿É¼ÇÀ» ÁÖ¸é ANSI/ISOÀÇ Ç¥ÁØÀ» ¾ö°ÝÇÏ°Ô °Ë»çÇϰí ÀÌ¿¡ ´ëÇÑ °æ°í¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. ÀÌ ±âÁ¾°£ ȣȯµÇ´Â Äڵ带 ÀÛ¼ºÇϰíÀÚ ÇÑ´Ù¸é °í·ÁÇØº¼¸¸ ÇÏ´Ù. °æ°í¸Þ½ÃÁö Á¦°Å
ÀÌÁ¦ À§¿¡ ¾ð±ÞµÈ ¿É¼ÇÀ» ÀÌ¿ëÇØ¼ parse.cc¸¦ ÄÄÆÄÀÏ ÇØº¸µµ·Ï ÇÏÀÚ. parse.cc´Â µÎ¹øÀÇ ¸®ÆÑÅ丵 °úÁ¤ÀÌ ³¡³ ÄÚµå·Î ¸®ÆÑÅ丵 - ¸ðµâȹ®¼ÀÇ Äڵ带 »ç¿ëÇÒ °ÍÀÌ´Ù. # g++ -W -Wall -Wcast-qual -Wshadow -o parse parse.cc parse.cc: In function `char* html_trim(char*, char*, int)': parse.cc:54: warning: unused variable `char specia[10]' parse.cc: In function `int main(int, char**)': parse.cc:87: warning: declaration of `lt_flag' shadows a global declaration parse.cc:22: warning: shadowed declaration is here parse.cc:83: warning: unused variable `int ridx' parse.cc:84: warning: unused variable `int widx' parse.cc:87: warning: unused variable `int lt_flag' parse.cc:96: warning: unused variable `int tag_status'´ëºÎºÐ ¼±¾ð¸¸ ÇÏ°í »ç¿ëÇÏÁö ¾Ê´Â º¯¼ö¿¡ °üÇÑ °æ°íÀ̰í, shadows º¯¼ö»ç¿ë¿¡ µû¸¥ °æ°í°¡ ¹ß°ßµÇ¾ú´Ù.
´ÙÀ½Àº °æ°í°¡ ¹ß»ýÇÑ ºÎºÐÀ» ¸ðµÎ Á¤¸®ÇÑ ÄÚµå´Ù.
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
using namespace std;
const int MAX_BUF_SIZE=1024;
enum tag_token {TAG_LT = '<', TAG_GT='>'};
void help()
{
printf("Usage : ./parse [-h] [-f FILENAME]\n");
printf("-f : Input Source File\n");
printf("-h : This Message\n");
}
int lt_flag = 0;
char *html_trim(char *src, char *dst, int size)
{
int ridx = 0;
int widx = 0;
while(ridx < size)
{
if (src[ridx] == TAG_LT)
{
lt_flag++;
}
if (src[ridx] == TAG_GT)
{
lt_flag--;
if (lt_flag == 0)
{
ridx++;
continue;
}
}
if (lt_flag == 1)
{
ridx++;
continue;
}
if(src[ridx] == '&')
{
unsigned int i = 0;
char specia[10] = {0x00,};
for (i = 0; i < 10; i++)
{
if (src[ridx+i] == ';')
{
ridx= (ridx+i);
break;
}
}
}
if (src[ridx] == '\n' || src[ridx] =='\r')
{
dst[widx] = ' ';
}
else
{
dst[widx] = src[ridx];
}
widx++;
ridx++;
}
return dst;
}
int main(int argc, char **argv)
{
int fd;
int readn;
int ridx;
int widx;
char rbuf[MAX_BUF_SIZE] = {0x00,};
char wbuf[MAX_BUF_SIZE] = {0x00,};
int lt_flag = 0;
int test_argv=0;
int c;
char *src_file;
// used tokenizing
char seps[] = "()|{}, \t.;&-[]\"\':`+#=";
char *tr;
int tag_status = 0;
int offset = 0;
while((c = getopt(argc, argv, "hf:")) != -1)
{
switch(c)
{
case 'h':
break;
case 'f':
src_file = optarg;
test_argv = 1;
break;
default:
break;
}
}
if (!test_argv)
{
help();
return 1;
}
if ((fd = open(src_file, O_RDONLY)) < 0)
{
return 1;
}
while ((readn = read(fd, rbuf+offset, MAX_BUF_SIZE)) > 0)
{
html_trim(rbuf, wbuf, readn);
tr = strtok(wbuf, seps);
while (tr != NULL)
{
printf("%s ", tr);
tr = strtok(NULL, seps);
}
memset(rbuf, 0x00, MAX_BUF_SIZE);
memset(wbuf, 0x00, MAX_BUF_SIZE);
}
return 0;
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|