GCCを介してgetline関数を定義するCプログラムのコンパイル

GCCを介してgetline関数を定義するCプログラムのコンパイル

getlineGNU Cライブラリの同じ名前の関数と競合するC ++という関数を定義し、使用している古いCプログラムをGCCを介してコンパイルしようとしています。どのようにコンパイルできますか? GCCに渡すと-ansi -D_XOPEN_SOURCE_EXTENDED奇妙なエラーが発生しますstrings.h

/usr/include/strings.h:74:16: error: expected identifier or '(' before '__extension__'

関連する行は次のとおりstrings.hです。

extern char *index (__const char *__s, int __c)
 __THROW __attribute_pure__ __nonnull ((1));

ベストアンサー1

この-fno-builtin-functionオプションは、とgcc同じ組み込み関数に使用できます(参照mallocstrlenGCCが提供するその他の組み込み機能glibc)、関数などの組み込みGNU拡張では機能しませんgetline

jw013のリンクで指摘したいくつかのソリューションと同様に、#defineソースファイルにステートメントを挿入してgetlineプログラム定義関数の名前を変更できます#define getline my_getline

以下は、このアプローチを示す小さなコード例です。

/*

gcc -Wall -Wextra -o mystrdup mystrdup.c

./mystrdup

*/

#include <stdio.h> 
#include <string.h>

// mystrdup.c:14: error: conflicting types for 'strdup'
//#define strdup my_strdup

char *strdup(char *str) {
   str = str;
   return str;
}

int main (void) { 
   char *str = 0;
   char mystr[] = "Hello, mystrdup!";
   str = strdup(mystr);
   printf("%s\n", str);
   return 0;
} 

おすすめ記事