Page 10 of 15

Re: IAR вопросик

PostPosted: 21 Nov 2012, 17:23
by TS-Labs
DimkaM wrote:j = sizeof(banner)

Ок. Что такое "banner"?

Re: IAR вопросик

PostPosted: 21 Nov 2012, 19:26
by lvd
По факту, имеем очевидный fuckt, что sizeof массива не передаётся через extern, ибо никак.

Re: IAR вопросик

PostPosted: 21 Nov 2012, 19:31
by deathsoft
передается, ибо extern char arrr[1000];
либо extern const mymsg[]="хуйня муйня";

Re: IAR вопросик

PostPosted: 21 Nov 2012, 19:55
by DimkaM
TS-Labs wrote:Ок. Что такое "banner"?

viewtopic.php?p=29341#p29341
deathsoft wrote:передается, ибо extern char arrr[1000];

тогда верный\правильный ход:
ftpd.h
#define BANNER "220 %s FTP version %s ready.\r\n"

ftpd.c
const char banner[] = BANNER;

main.c
extern const char banner[sizeof(BANNER)];

deathsoft wrote:либо extern const mymsg[]="хуйня муйня";

действительно хуйня:
extern const char banner[]=BANNER;
еггог

Re: IAR вопросик

PostPosted: 21 Nov 2012, 20:39
by deathsoft
Какбэ:
1.h
Code: Select all
extern const char zz[]="abcdefg";

1.cpp
Code: Select all
#include <stdio.h>
#include "1.h"
int main()
{
   printf("sizeof(zz)=%u, zz='%s'\n",sizeof(zz), zz);
   return 0;
}

результат:
Code: Select all
sizeof(zz)=8, zz='abcdefg'

Re: IAR вопросик

PostPosted: 21 Nov 2012, 20:45
by deathsoft
Специально для древнего иара:
1.h:
Code: Select all
const char zz[]="abcdefg";
extern const char zz[];


Code: Select all
      3          int main()
      4          {
   \   0000            main:
      5             printf("sizeof(zz)=%u, zz='%s'\n",sizeof(zz), zz);
   \   0000  210000            LD      HL,zz
   \   0003  E5                PUSH    HL
   \   0004  210800            LD      HL,8
   \   0007  E5                PUSH    HL
   \   0008  210000            LD      HL,?0010
   \   000B  E5                PUSH    HL
   \   000C  CD0000            CALL    printf
   \   000F  F1                POP     AF
   \   0010  F1                POP     AF
   \   0011  F1                POP     AF
      6             return 0;
   \   0012  210000            LD      HL,0
      7          }
   \   0015  C9                RET
   \   0000                    RSEG    CSTR
   \   0000            ?0010:
   \   0000  73697A65          DEFB    'sizeof(zz)=%u, zz=''%s'''


Но если линкер без оптимизации, то у тебя будет 100 инстансов этой строки, везде куда инклюд включен.

Re: IAR вопросик

PostPosted: 21 Nov 2012, 22:52
by TS-Labs
DimkaM wrote:viewtopic.php?p=29341#p29341

Тупишь как обычно?

Re: IAR вопросик

PostPosted: 22 Nov 2012, 05:09
by DimkaM
TS-Labs wrote:Ок. Что такое "banner"?
Массив чаров, sizeof(banner) возвращает количество байт которые занимает массив.
Ежли sizeof(banner[0]), то вернётся количество байт которое занимает [0] - элемент. компилю мы указали(extern const char banner[]) что массив чаровый, поэтому ему известно что [0]элемент - это 1 байт(в случае с з80). Но ему не известно сколько всего этих элементов в массиве.
TS-Labs wrote:Тупишь как обычно?
Еслиб не тупил, то не спрашивал. Осталось тока выяснить в каком месте туплю.

Re: IAR вопросик

PostPosted: 22 Nov 2012, 07:10
by jdigreze
А случаем не banner[]=banner[0]?

Re: IAR вопросик

PostPosted: 22 Nov 2012, 07:38
by jdigreze
Теперь видимо я туплю... :(
Видимо твой вариант через define есть наиболее правильный.