2016-03-24 18 views
2

Mümkün olduğunca kısa olacağım. Öyle birkaç başlık dosyaları "header1.h", "header2.h", ... ve içeren bir main.c dosyayı ettik. "main.c" içinde, kullanıcı tanımlı bir yapı kullanılarak bir değişken bildirilir. Ancak bu yapının yerini bilmiyorum ("main.c" başlıklı başlık dosyalarından birinde bulunan bu başlık dosyalarından birinde veya başka bir başlık dosyasında bulunmalıdır). Benim soru şu ki, bu yapının ana dosyasını bulmak için "grep" kullanabilir miyim? "grep" yoksa, başka neler yapılabilir? Ve Ubuntu 14.04 kullanıyorum.C üst yapı/işlev üstbilgi dosyasını nasıl bulabilirim?

SO1.h:

#ifndef SO1_H 
#define SO1_H 
struct Foo {}; 
#endif 
-
+1

'grep -rnw --color.-e "struct_name" ' – LPs

+0

' 'Eclipse' gibi bir' IDE' kullanabilirsiniz. – LPs

+3

Kod sınıfınızda bir sınıf veya işlev adı için metin araması yapmayı gerçekten gerçekten istiyor musunuz? Bu gerçekten 4 upvotes aldın mı? Barmy. –

cevap

4

yerine önişlemci sadece kopya tüm #include d dosyaları, bunu çalıştırmak ve ön işlenen çıktıda bakabilirsiniz Çünkü

dosya sınırlarını gösteren yerde gösterim bırakır

SO2.h:

#ifndef SO2_H 
#define SO2_H 
#include "SO1.h" 
#endif 

SO.cpp:

#include "SO2.h" 
int main(){} 

Artık Ubuntu'dayken, gcc kullandığınızı varsayalım (veya clang, ama aynı seçeneği kabul eder).

# 1 "SO.cpp" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "SO.cpp" 
# 1 "SO2.h" 1 


# 1 "SO1.h" 1 


struct Foo {}; 
# 4 "SO2.h" 2 
# 2 "SO.cpp" 2 
int main(){} 

Hemen struct Foo Yukarıdaki dosya etiket, söz konusu struct tanımlanır nerede olduğu SO1.h olduğunu görebilirsiniz: Eğer -E bayrağı geçerseniz, sadece ön işlemci çalıştırır, daha sonra çıktıyı döker.

Bu, C ve C++ için eşit derecede iyi çalışır (örneğimde C++ kullanmış olsam da). Bununla birlikte, normalde bir soru için sadece tek bir dil seçmelisiniz.


Eğer struct Mevcut projede yerdedir için arama (yani bir yerde geçerli dizinde), gerçekten böyle grep gibi temel komut satırı araçlarını kullanabilirsiniz biliyorsanız. Örneğin, dosya ve eşleşen kaynak kod dosyalarının satırı hakkında bilgi verecektir. Düzenli ~/bin/srcgrep azından ben koymak biraz komut dosyası kullan:

#!/bin/bash 
RE="$1" 
shift 1 
find [email protected] \(-name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.c" \) -exec grep263 -EHn --colour=always "$RE" {} \; 

Sonra

srcgrep "\<struct Foo\>" dir1 dir2 

tüm kaynak kodu yerde dir1 ve dir2 altında (alt dizinleri dahil) dosyaları arayacaktır.

Daha gelişmiş bir araç ack!'dur.