kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 mary
mary
Question

Mengkompilasi beberapa file C dalam sebuah program

Saya memiliki dua file berikut ini:

file1.c

int main(){
  foo();
  return 0;
}

file2.c

void foo(){

 }

Dapatkah saya mengkompilasi dan menautkan kedua file tersebut bersama-sama sehingga file1.c akan mengenali fungsi foo tanpa menambahkan extern?

Memperbarui prototipe.

gcc file1.c file2.c throws: warning: deklarasi implisit fungsi foo.

14 2012-01-04T14:46:49+00:00 3
 nbro
nbro
Pertanyaan edit 11 Maret 2016 в 10:37
Pemrograman
c
compilation
linker
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
Sangeeth Saravanaraj
Sangeeth Saravanaraj
4 Januari 2012 в 3:04
2012-01-04T15:04:06+00:00
Lebih
Sumber
Sunting
#15107134

Cara yang benar adalah sebagai berikut:

file1.c

#include <stdio.h>
#include "file2.h"

int main(void){
    printf("%s:%s:%d \n", __FILE__, __FUNCTION__, __LINE__);
    foo();
    return 0;
}

file2.h

void foo(void);

file2.c

#include <stdio.h>
#include "file2.h"

void foo(void) {
    printf("%s:%s:%d \n", __FILE__, __func__, __LINE__);
    return;
}

keluaran

$
$ gcc file1.c file2.c -o file -Wall
$
$ ./file 
file1.c:main:6 
file2.c:foo:6 
$ 
Sangeeth Saravanaraj
Sangeeth Saravanaraj
Jawaban edit 4 Januari 2012 в 3:29
31
0
Solution / Answer
 chrisaycock
chrisaycock
4 Januari 2012 в 2:49
2012-01-04T14:49:08+00:00
Lebih
Sumber
Sunting
#15107133

Anda tidak memerlukan extern, tetapi file1.c harus melihat deklarasi bahwa foo() itu ada. Biasanya deklarasi ini ada di file header.

Untuk menambahkan deklarasi forward tanpa menggunakan file header, cukup modifikasi file1.c menjadi:

int foo();  // add this declaration

int main(){
  foo();
  return 0;
}
 chrisaycock
chrisaycock
Jawaban edit 4 Januari 2012 в 3:03
7
0
Paul R
Paul R
4 Januari 2012 в 2:48
2012-01-04T14:48:57+00:00
Lebih
Sumber
Sunting
#15107132

Anda bisa, tetapi Anda tidak boleh melakukannya.

Gunakan berkas header, file2.h:

// file2.h

void foo(); // prototype for function foo()

Kemudian tambahkan:

#include "file2.h" 

di file1.c

Untuk mengkompilasi:

$ gcc -Wall file1.c file2.c -o foo

Sebagai aturan umum, lebih baik (lebih kuat) menggunakan file header untuk mendefinisikan interface dari setiap modul daripada prototipe ad hoc di dalam modul-modul dependen. Ini kadang-kadang dikenal sebagai prinsip SPOT (Single Point Of Truth).

Paul R
Paul R
Jawaban edit 4 Januari 2012 в 3:10
6
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
工藤 芳則
Terdaftar 6 hari yang lalu
2
Ирина Беляева
Terdaftar 1 minggu yang lalu
3
Darya Arsenyeva
Terdaftar 1 minggu yang lalu
4
anyta nuam-nuam (LapuSiK)
Terdaftar 1 minggu yang lalu
5
Shuhratjon Imomkulov
Terdaftar 1 minggu yang lalu
ID
JA
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi