アプリ版:「スタンプのみでお礼する」機能のリリースについて

別フォルダにあるファイル内の変数を参照したい場合、どうグローバル変数宣言すれば良いでしょうか? 【例】
abcフォルダ
tmp1.cファイル
別フォルダにあるファイル内の変数を参照したい場合、どうグローバル変数宣言すれば良いでしょうか?

【例】
abcフォルダ
tmp1.cファイル efgフォルダ
tmp2.cファイル
⇨このファイルに記載した変数をtmp1.cファイルでも参照したい

A 回答 (6件)

変数の実体をtmp1.cで宣言するとして、2つ方法があります。


一つは、tmp2.cファイルの先頭でtmp1.cをincludeする方法
もう一つは、tmp2.cファイル内でexternで変数をグローバルとして宣言し、リンク時にabc/tmp1.oとefg/tmp2.oをリンクする方法

一般的には後者の方法を取ります。後者の方法でよくやるやり方は、tmp1.hというヘッダファイルの中にexternでグローバル変数を宣言しておき、このグローバル変数を利用するCファイルはtmp1.hをincludeします。

前者のやり方は、以前学生が書いていた衝撃的なコードがあって、

main.cというファイルに、
#include "file1.c"
#include "file2.c"
....

main() {
main_process();
printf("%s\n", result); // resultはchar*型のグローバル変数で、どこかのファイルで宣言されている
}

みたいな内容が書いてあり、
$ gcc -o myprog main.c
で一発コンパイルするという手法です。

なるほどなーと思いましたが、グローバル変数が絡んだ瞬間に意味が分からなくなります。
    • good
    • 0

変数名のまえにextern句をつければいいんじゃないかな。


externの使い方はネット上にいろいろ参考プログラムがあるみたいです。
    • good
    • 0

cではソ―スファイルを何処に置くか


ということと
コ―ディングには
何の関係もないです。

pythonとかでは影響するけど・・・
    • good
    • 0

フォルダ云々はmakeファイルでのソースファイル指定がどうされるかだけのことで、グローバル変数の宣言とは無関係です。



test2.c内でグローバル変数として定義した変数をextern宣言したヘッダーファイルを作成し、そのヘッダーファイルをtest1.cとtest2.cの両方でインクルードします。
それだけです。
Cの教科書に書かれてますし、ちょっと検索しますと以下のような解説ページがみつかるはずです。

https://www.sejuku.net/blog/24107

参考まで。
    • good
    • 0

失礼、


関数の実体じゃなく、変数の実体です。
    • good
    • 0

別に、どのフォルダにあっても、


関数の実体にフォルダは反映されないので、
tmp1.c で書いている関数に沿ったものの宣言を、
ヘッダなり、自身のCファイル(tmp2.c)に書けばいいだけです。

きちんと別フォルダにあるオブジェクトをリンクできれば。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!