A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
ANo.2 & 3です。
解決策といっても、どうしたいの?
間違いない解決策はANo.2に示してあるように、indexなんて名前の関数なり変数を使わないこと。歴史的にはBSD系の関数で標準ライブラリ関数としては傍流だけど、それなりに使われているから可読性を損ねるのは間違いない。
それでも使いたいというなら警告を無視すれば良い。所詮は警告だし、レガシーな関数なので隠されても特に問題はないでしょう。警告が出ていると拙いというなら#pragmaか何かで明示的に抑制すれば良い。
あと、string.hはインクルードしているけどstrings.hはインクルードしていないという件は・・・標準ライブラリって仕様外の関数・変数を宣言しないって仕様になっていましたっけ? なっていればライブラリのバグですが、string.hでstrings.hを読み込んでるとかじゃないかと思いますけど。
回答ありがとうございます
その後調査し自力で解決できました
頂いた回答は解決につながりませんでしたが、しかし時間を割いていただきありがとうございました
No.3
- 回答日時:
Linuxのコマンドラインか、インターネットの検索エンジンで「man index」とすれば情報が得られるかと思います。
indexはレガシーで現在の標準ライブラリ仕様からは削除されていますが、もともとstrings.hで宣言される文字検索関数です。それでほとんどの処理系では互換性のために今でもindexの実装が残っていると思われます。Man page of index によると
>4.3BSD; POSIX.1-2001 では「過去の名残 (LEGACY)」と位置付けられている。 POSIX.1-2008 では index() と rindex() の仕様が削除されている。 代わりに、 strchr(3) と strrchr(3) の使用が推奨されている。
回答ありがとうございます。
man index というのは、例えば次のようなページでしょうか
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/ …
このページであれば質問前に参照しており、そこで解決しなかったため質問しました
このページによればstrings.hをincludeすればindexを使用できるようですが質問に記載したメッセージの通りstrings.hではなくstring.hでindexが定義されているようなメッセージでした
実際にプログラムのほうもstring.hはincludeしていますがstrings.hはincludeしていません
質問に記載のメッセージが出る原因は何でしょうか、どうやったら解決できますか
No.2
- 回答日時:
日本語訳してみましょう。
< func.c:1984: 警告: 'index'の宣言は大域宣言を隠す。
< /usr/include/string.h:1233: 警告: 隠された宣言はここ。
このくらいの英語は読めないと・・・
func.cの1984行目で'index'を宣言しているが、string.hにindexという関数があり、それが同名のために隠されてしまうので警告された。
func.cの中でstring.hのindex関数を使っていない限り動作には問題ないが、標準ライブラリの関数と同名の関数(変数?)を使うのは可読性が下がるのでやめましょう。
回答ありがとうございます
より詳しいことはNo.1の回答へのお礼に記載しましたので、そちらを参照してください
追加の質問がありますが
> func.cの中でstring.hのindex関数を使っていない限り動作には問題ないが、標準ライブラリの関数と同名の関数(変数?)を使うのは可読性が下がるのでやめましょう。
ここで述べられている標準ライブラリというのはどういうものでしょうか
No.1
- 回答日時:
そのメッセージの意味は理解できていますか?
回答ありがとうございます
すいません、このメッセージの登場にあまりに衝撃を受けて質問を少し端折っていたようです
作成中のプログラムに置いてstring.hをincludeしていましたが、なぜか「index」という名称が定義済みになっていました
indexについて以下のサイトで確認しましたが
※ http:を付けると正常にリンクが生成されないので外しました。
//www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
C言語の予約語や、ライブラリの関数名や変数名などに見つけることができませんでした
それにもかかわらず定義済みとなっている原因は何でしょうか、そしてこれはどうやったら解決できるのでしょうか
コンパイラのバージョンを上げれば解決するのでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) cryptcatのビルド 4 2022/07/21 14:55
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- 英語 相手の言っている意味が分かりません(英語でのメールです) 1 2022/06/09 16:58
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- 工学 光のレンズ 集光力についての問題です。英語があります。 Consider a lens made o 2 2022/11/14 20:11
- C言語・C++・C# Project Euler #6 Sum square difference 至急教えてください。 1 2022/09/17 16:16
- その他(プログラミング・Web制作) pythonのエラーについて 2 2022/08/17 17:17
- 英語 英文の解説お願いします。 2 2023/01/07 08:27
- 英語 Like talented actors, leaders with string emotiona 1 2023/08/17 22:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
python urlopen error について...
-
iCloudフォトライブラリ内の画...
-
マウスのクリックを自動で
-
declaration of 'index' shadow...
-
Dreamweaverのライブラリが反映...
-
フーリエ変換やFFTのプログラム
-
32768以上の乱数を作りたいので...
-
C# EXCELセルの入力規則設定に...
-
gcc に mktemp 危険と怒られ...
-
(C言語等で)既存ファイル群の属...
-
sleep関数
-
C言語のステップアップ
-
コマンドラインのオプションの...
-
Cでmd5を使うには
-
VX-works
-
【C#C++】Win32API呼び出し
-
MFC/C++ sprintf の代わりに <<
-
Google Chartの株価チャートで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
python urlopen error について...
-
iCloudフォトライブラリ内の画...
-
本格的なGUIを作るのにおすすめ...
-
Ps+のフリープレイでDestiny2の...
-
declaration of 'index' shadow...
-
LIBCMT.LIBをリンクしてコンパ...
-
ISOイメージの作成方法について
-
32768以上の乱数を作りたいので...
-
boostのアンインストールについて
-
ライブラリ作成時のグローバル...
-
iPhoneのカメラロールへ画像を...
-
Dreamweaverのライブラリが反映...
-
静的ライブラリから静的ライブ...
-
C標準ライブラリがwinAPIを経由...
-
じゃんけんゲーム(DXライブラ...
-
DirectX Graphics と OpenGLっ...
-
ATLとSTLの違いは何でしょうか?
-
音声出力のライブラリ
おすすめ情報