0

ポインターの戻り値を取得するテスト コードを作成しようとしています。

#include <stdio.h>

int main(void){

  char myStrcpy(char *str1,char *str2){
    while(*str2 != '\0'){
      *str1++ = *str2++;
    }
    *str1 = '\0';
    return str1;// return the final pointer that should point to the '\0'
  }

  char *reValue;
  char string1[] = "abcd";
  char string2[10];
  reValue = myStrcpy(string2,string1);
  reValue--;//now it should point to the last character which is `d`
  printf("this value of string 2 is %s\n",string2);
  printf("the return value the function is %c\n",*reValue);
  return 0;
}

gcc はエラーも警告もなくこのコードをコンパイルしますが、clang は 4 つのエラーを出します:

my_stcpy.c:4:40: error: expected ';' at end of declaration
        char*  myStrcpy(char *str1,char *str2){
                                              ^
                                              ;
my_stcpy.c:14:2: error: use of undeclared identifier 'reValue'
        reValue = myStrcpy(string2,string1);
        ^
my_stcpy.c:15:2: error: use of undeclared identifier 'reValue'
        reValue--;
        ^
my_stcpy.c:17:50: error: use of undeclared identifier 'reValue'
        printf("the return value the function is %c\n",*reValue);
                                                        ^
4 errors generated.

何か案が?

4

1 に答える 1

4

GCC はネストされた関数をサポートしていますが、 clang はサポートしていません (そして急いでそうするつもりはありません)

関数が誤ってネストされているようです。メイン関数の外に移動するだけで、機能し続けます。

于 2012-08-09T07:53:02.803 に答える