プロが教えるわが家の防犯対策術!

C言語のソースにコメントアウトした内容は、
コンパイル時の最適化で取り除かれてしまうと思いますが、特定のソースコードに記載のコメントをコンパイル時に保持した状態で、コンパイルし、オブジェクトファイルを生成することは可能でしょうか?

例えば、ソースコード中に記載のコピーライトのコメントアウトの内容をコンパイル後も保持するようなことが出来るのか知りたく。

A 回答 (7件)

コンパイラではコメント部は読み捨てられるので無理です。



代案1.
コピーライトなどの文章を出力する機能を
コメントではなくプログラム機能として実装する

代案2.
Cプリプロセッサにてコメント部を文字列に変換してからコンパイラにかける
ただし、そのためのマクロを破綻なく書くのはとても難しいので注意

代案3.
doxygen 等の文書生成ツールを使ってコメントを元に取扱説明書を生成し
オブジェクトファイル等の成果物に同梱する
コピーライト等の利用者に読ませたい情報の一般的な展開方法です
参考)
https://ja.wikipedia.org/wiki/Doxygen
    • good
    • 0

コメントアウトした場所ではないですが、コメントアウトした内容のオブジェクトファイルへの埋め込みは、以下の方法で可能では?



コンパイル時の最適化で取り除かれてしまわないように、
呼び出さない関数を定義してそこに
char * 型の変数を用意して、そこに
コメントアウトしたい内容を記した文字列定数を代入して、
print文で出力
すれば、可能かと。
    • good
    • 0

まず、コメントアウトというのは、「a = 1;」のようなコードにコメント記号を付けて「/* a = 1; */」にというコメントに変更するという「動作」「編集作業」を指しますので、動作を残すのは不可能です。


そうじゃなくて、おそらく、「コメント」の意味でお使いかと思います。

コメントを残すのは不可能ですが、オブジェクトコードに文字列を残すのは、プログラム冒頭に、グローバル変数として下記のように書けば出来ます。

char copyright[]="This is a pen. I am a boy.";

もしかすると最適化度合いを高めると省かれてしまうかも知れませんのでコンパイル後に確認しましょう(過去にはバージョン管理のために使われていたので、おそらく大丈夫だと思いますが)。また、コンパイラーによっては「使われない変数」という警告が出るかも知れませんが、無視。
    • good
    • 0

一般的にはコンパイラが最適化するのでコメントを残してもコードと対応しなくなるので意味が無いのでしませんね。

    • good
    • 0

コンパイル、ソースコード、オブジェクト の意味がお分かりか?


オブジェクトにコメントを入れるなんて 容量が大きくなって動作が遅くなるのでやらないほうがいいです。その代わり、ソースにはコメントを入れましょう。
    • good
    • 0

規格では, 処理のかなり初期の段階で「注釈を空白 1個に置き換える」という操作をしている. そして, 規格に従う処理系では (実際の挙動はどうであれ) 「そのような操作をしているかのよう」に振る舞うことが求められる. 従って, 「規格に従う処理系を使う」限りは不可能 (そもそも規格には「オブジェクトファイル」なるものは存在しなかったような気もする).



もちろん実際のあらゆる処理系が「常に厳格に規格に従う」というわけではないので, なんらかのオプション指定をすればできるような処理系があるかもしれない. 私は知らないけど.

文字列リテラルを使っちゃダメなの?
    • good
    • 0

むかし、Cコンパイラー自体のソースをちょっといじっていたが・・・。


個人的には、無理だと思います。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています